参数替换 - 模式后删除字符串的一部分
问题描述:
比方说,我有一个类似如下的路径:参数替换 - 模式后删除字符串的一部分
/A/B/C/DIRECTORY/D/E/F
现在,我想用参数替换来实现的东西,被切割的部分DIRECTORY之后的路径,无论路径位于何处(A,B,C等仅代表随机目录名称)。
置换后:
/A/B/C/DIRECTORY
这是我到目前为止已经试过:
#!/bin/bash
if [[ $# < 1 ]]
then
echo "Usage: $0 DIRECTORY"
fi
CURRENT_DIRECTORY=$(pwd)
DIRECTORY=$1
cd ${CURRENT_DIRECTORY%!(DIRECTORY)/*}
显然,这是行不通的。我可以使用awk或sed实现这一点,但我很感兴趣的是,如果可能只使用参数替换。
答
尝试下一个解决方案:
cd ${CURRENT_DIRECTORY/${DIRECTORY}*/""}
编辑:
更准确的答案将除最后一部分后追加目录:
cd ${CURRENT_DIRECTORY/${DIRECTORY}*/""}$DIRECTORY
答
[[email protected] ~]$ D="/A/B/C/foo/D/E"
[[email protected] ~]$ echo "${D/foo*/}"
/A/B/C/
当然,这ISN” t完美:
[[email protected] ~]$ D="/A/B/C/foobar/D/foo/E"
[[email protected] ~]$ echo "${D/foo*/}"
/A/B/C/
阅读bash手册页并搜索“模式替换”。
答
可能这可以帮助 -
[jaypal:~/Temp] D="A/B/C/DIRECTORY/D/E/F"
[jaypal:~/Temp] echo $D
A/B/C/DIRECTORY/D/E/F
[jaypal:~/Temp] c=${D%/*/*/*}
[jaypal:~/Temp] echo $c
A/B/C/DIRECTORY
答
感谢Birei,我来到这个(并不完美,但足够好的解决方案:
#/bin/bash
if [[ $# < 1 ]]
then
echo "Usage: $0 BASENAME"
fi
echo ${PWD/%$1*/$1}
例子:
$ PWD=/home/ltorvalds/workspace
$ ./up.sh ltorvalds
/home/ltorvalds