如何在csh中提取字符串?

时间:2012-02-29 10:38:26

标签: string shell csh

我想提取一个字符串如下:

setenv VARIABLE /opt/Application/File/Version22

我想只显示

File/Version22

在屏幕上。这意味着/opt/Application/始终是前缀。我想显示字符串的其余部分。我怎么在csh中做到这一点?

此致

3 个答案:

答案 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