我想如下提取字符串:如何在csh中提取字符串?
setenv VARIABLE /opt/Application/File/Version22
我只想顯示
File/Version22
在屏幕上。這意味着/opt/Application/
始終是前綴。我想顯示字符串的其餘部分。我如何在csh中執行此操作?
問候
我想如下提取字符串:如何在csh中提取字符串?
setenv VARIABLE /opt/Application/File/Version22
我只想顯示
File/Version22
在屏幕上。這意味着/opt/Application/
始終是前綴。我想顯示字符串的其餘部分。我如何在csh中執行此操作?
問候
現在你已經更新了問題(感謝你),很明顯,你總是要刪除前綴/opt/Application
。
最直接的方式做到這一點,這將在任何shell工作,就是:
echo $VARIABLE | sed 's|^/opt/Application/||'
(這是通常使用/
作爲這樣的替代分隔符,但你可以使用任何標點符號;我使用|
以避免出現衝突,在該模式中/
字符)
個比較,可能更有效的具體的tcsh-,辦法做到這一點是:
echo $VARIABLE:s|/opt/Application/||
它可能更高效,因爲它在shell中完成並避免調用外部sed
命令。另一方面,執行sed
的開銷不大。
請注意,原始csh中不支持:s
語法。它在tcsh和一些較新版本的csh中受到支持。如果你想做這個移植,只需使用sed
。
完全同意你的評估:-)但這應該是一個評論。 – 2012-03-01 13:09:50
@ Christian.K:我考慮過這個問題,但第一部分確實如前所述回答了這個問題。 – 2012-03-01 19:55:18
夠公平的:-) – 2012-03-02 04:54:05
我假設你想在一個文件名中的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
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)
總是前綴「/選擇/應用程序」?如果是這樣,爲什麼不使用'sed':'echo $ VARIABLE | sed的#/ opt/Application/## g'' – 2012-02-29 11:01:04