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:我考虑过,但第一部分确实回答了前面提到的问题。