2012-02-29 53 views
0

我想如下提取字符串:如何在csh中提取字符串?

setenv VARIABLE /opt/Application/File/Version22 

我只想顯示

File/Version22 

在屏幕上。這意味着/opt/Application/始終是前綴。我想顯示字符串的其餘部分。我如何在csh中執行此操作?

問候

+1

總是前綴「/選擇/應用程序」?如果是這樣,爲什麼不使用'sed':'echo $ VARIABLE | sed的#/ opt/Application/## g'' – 2012-02-29 11:01:04

回答

1

現在你已經更新了問題(感謝你),很明顯,你總是要刪除前綴/opt/Application

最直接的方式做到這一點,這將在任何shell工作,就是:

echo $VARIABLE | sed 's|^/opt/Application/||' 

(這是通常使用/作爲這樣的替代分隔符,但你可以使用任何標點符號;我使用|以避免出現衝突,在該模式中/字符)

個比較,可能更有效的具體的tcsh-,辦法做到這一點是:

echo $VARIABLE:s|/opt/Application/|| 

它可能更高效,因爲它在shell中完成並避免調用外部sed命令。另一方面,執行sed的開銷不大。

請注意,原始csh中不支持:s語法。它在tcsh和一些較新版本的csh中受到支持。如果你想做這個移植,只需使用sed

+0

完全同意你的評估:-)但這應該是一個評論。 – 2012-03-01 13:09:50

+0

@ Christian.K:我考慮過這個問題,但第一部分確實如前所述回答了這個問題。 – 2012-03-01 19:55:18

+0

夠公平的:-) – 2012-03-02 04:54:05

0

我假設你想在一個文件名中的2個姓氏:

setenv VARIABLE /opt/Application/File/Version22 
set lastfile=`basename $VARIABLE` 
set prevpath=`dirname $VARIABLE` 
set previousfile=`basename $prevpath` 
set file=$previousfile/$lastfile 
echo $file 
1

C-Shell具有內置的字符串改性劑,可以用很少的代碼做到這一點:

echo $VARIABLE:h:t/$VARIABLE:t 

string modifiers: 
:h = remove the last directory (aka head) 
:t = remove every directory except the last one (aka tail)