我想如下提取字符串:如何在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