2011-12-19 70 views
4

比方说,我有一个类似如下的路径:参数替换 - 模式后删除字符串的一部分

/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实现这一点,但我很感兴趣的是,如果可能只使用参数替换。

回答

1

尝试下一个解决方案:

cd ${CURRENT_DIRECTORY/${DIRECTORY}*/""} 

编辑:

更准确的答案将除最后一部分后追加目录:

cd ${CURRENT_DIRECTORY/${DIRECTORY}*/""}$DIRECTORY 
2

可能这可以帮助 -

[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 
0

感谢Birei,我来到这个(并不完美,但足够好的解决方案:

#/bin/bash 

if [[ $# < 1 ]] 
then 
    echo "Usage: $0 BASENAME" 
fi 

echo ${PWD/%$1*/$1} 

例子:

$ PWD=/home/ltorvalds/workspace 
$ ./up.sh ltorvalds 
/home/ltorvalds  
相关问题