2015-01-06 107 views
0

我试图删除BASH中某个变量的一些内容。我特别想删除以下部分从变量$ USER部分:用Sed替换变量的内容

<username><![CDATA[ 

我的代码如下所示:

NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER` 

我用反斜杠转义特殊字符(我不知道是否正确),并想从$ USER中删除提及的部分,并将结果赋给变量$ NUSER。

请帮忙。 :)

回答

3

如果$USER是包含您想要编辑的值的文件的名称,那么您尝试的方式(减去一些多余的反斜杠)将会起作用。由于该值是变量本身,你要管它的sed的标准输入,像这样:

NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//') 

$()不一样反引号,但我喜欢这种语法,因为它更容易窝。

注意需要提醒的是echo "$USER"导致问题如果$USER具有echo选项(如-n-e)的值。如果这是一个担心,请使用bash特定的字符串查看Jonathan Leffer的解决方案。

+0

我明白了。我在BASH很新,但它很有趣。对不起,如果这是一个愚蠢的问题,非常感谢:) – Neekoy

2

在另一个answer中,Wintermute提出'无处不在'解决方案。

唯一击溶液使用here-string代替—这就是<<<符号:

NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER") 

它具有避免在副壳的第二处理的优点。

+0

相信与否,我即将编辑它,尽管原因不同:即使'$ USER'具有某些东西的值, echo'解释为选项,如'-n'或'-e'。有+1。 – Wintermute

2
NUSER="${USER%%<!*}" 

使用shell变量操作速度快了很多,在这种情况下打开一个子shell和sed的作用(但不是你的要求的确切答复要求使用SED)