String 如何在csh中提取字符串?

String 如何在csh中提取字符串?,string,shell,csh,String,Shell,Csh,我想提取一个字符串,如下所示: setenv VARIABLE /opt/Application/File/Version22 我只想展示 File/Version22 在屏幕上。这意味着/opt/Application/始终是前缀。我想显示字符串的其余部分。我在csh怎么做 关于我假设您希望在文件名中获得两个姓氏: setenv VARIABLE /opt/Application/File/Version22 set lastfile=`basename $VARIABLE` set pr

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

setenv VARIABLE /opt/Application/File/Version22
我只想展示

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


关于

我假设您希望在文件名中获得两个姓氏:

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

现在,您已经更新了问题(谢谢您的提问),很明显您总是希望删除
/opt/Application
前缀

最简单的方法是:

echo $VARIABLE | sed 's|^/opt/Application/||'
(通常使用
/
作为类似替换的分隔符,但您可以使用任何标点符号;我使用
|
是为了避免与模式中的
/
字符冲突。)

一种更具体、更有效的方法是:

echo $VARIABLE:s|/opt/Application/||
它可能更有效,因为它是在shell中完成的,并且避免调用外部
sed
命令。另一方面,执行
sed
的开销不太可能很大


请注意,原始csh中不支持
:s
语法。它在tcsh和一些较新版本的csh中受支持。如果您想以可移植的方式执行此操作,只需使用
sed

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)

前缀是否始终为“/opt/Application”?如果是这样,为什么不使用
sed
echo$VARIABLE | sed的#/opt/Application/##g'
我们如何将其与
find.的结果结合起来-键入d
完全同意您的评估:-),但这可能是一个评论。@Christian.K:我考虑过,但第一部分确实回答了前面提到的问题。