2012-02-29 50 views
0

我想如下提取字符串:如何在csh中提取字符串?

setenv VARIABLE /opt/Application/File/Version22 

我只想显示

File/Version22 

在屏幕上。这意味着/opt/Application/始终是前缀。我想显示字符串的其余部分。我如何在csh中执行此操作?

问候

+1

总是前缀“/选择/应用程序”?如果是这样,为什么不使用'sed':'echo $ VARIABLE | sed的#/ opt/Application/## g'' – 2012-02-29 11:01:04

回答

1

现在你已经更新了问题(感谢你),很明显,你总是要删除前缀/opt/Application

最直接的方式做到这一点,这将在任何shell工作,就是:

echo $VARIABLE | sed 's|^/opt/Application/||' 

(这是通常使用/作为这样的替代分隔符,但你可以使用任何标点符号;我使用|以避免出现冲突,在该模式中/字符)

个比较,可能更有效的具体的tcsh-,办法做到这一点是:

echo $VARIABLE:s|/opt/Application/|| 

它可能更高效,因为它在shell中完成并避免调用外部sed命令。另一方面,执行sed的开销不大。

请注意,原始csh中不支持:s语法。它在tcsh和一些较新版本的csh中受到支持。如果你想做这个移植,只需使用sed

+0

完全同意你的评估:-)但这应该是一个评论。 – 2012-03-01 13:09:50

+0

@ Christian.K:我考虑过这个问题,但第一部分确实如前所述回答了这个问题。 – 2012-03-01 19:55:18

+0

够公平的:-) – 2012-03-02 04:54:05

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 
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)