我想提取一个字符串如下:
setenv VARIABLE /opt/Application/File/Version22
我想只显示
File/Version22
在屏幕上。这意味着/opt/Application/
始终是前缀。我想显示字符串的其余部分。我怎么在csh中做到这一点?
此致
答案 0 :(得分:1)
现在你已经更新了问题(谢谢你),很明显你总是希望删除/opt/Application
前缀。
最简单的方法是在任何shell中使用:
echo $VARIABLE | sed 's|^/opt/Application/||'
(通常使用/
作为此类替换的分隔符,但您可以使用任何标点符号;我使用|
来避免与/
字符冲突模式。)
更具特异性,可能更有效的方法是:
echo $VARIABLE:s|/opt/Application/||
它可能更有效,因为它是在shell中完成的,并且避免调用外部sed
命令。另一方面,执行sed
的开销不太可能很大。
请注意,原始csh不支持:s
语法。它在tcsh和一些较新版本的csh中受支持。如果您想要移植,请使用sed
。
答案 1 :(得分: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)
答案 2 :(得分: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