2011-12-19 40 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  
相關問題