我试图删除BASH中某个变量的一些内容。我特别想删除以下部分从变量$ USER部分:用Sed替换变量的内容
<username><![CDATA[
我的代码如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我用反斜杠转义特殊字符(我不知道是否正确),并想从$ USER中删除提及的部分,并将结果赋给变量$ NUSER。
请帮忙。 :)
我试图删除BASH中某个变量的一些内容。我特别想删除以下部分从变量$ USER部分:用Sed替换变量的内容
<username><![CDATA[
我的代码如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我用反斜杠转义特殊字符(我不知道是否正确),并想从$ USER中删除提及的部分,并将结果赋给变量$ NUSER。
请帮忙。 :)
如果$USER
是包含您想要编辑的值的文件的名称,那么您尝试的方式(减去一些多余的反斜杠)将会起作用。由于该值是变量本身,你要管它的sed的标准输入,像这样:
NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//')
$()
不一样反引号,但我喜欢这种语法,因为它更容易窝。
注意需要提醒的是echo "$USER"
导致问题如果$USER
具有echo
选项(如-n
或-e
)的值。如果这是一个担心,请使用bash特定的字符串查看Jonathan Leffer的解决方案。
在另一个answer中,Wintermute提出'无处不在'解决方案。
唯一击溶液使用here-string代替—这就是<<<
符号:
NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER")
它具有避免在副壳的第二处理的优点。
相信与否,我即将编辑它,尽管原因不同:即使'$ USER'具有某些东西的值, echo'解释为选项,如'-n'或'-e'。有+1。 – Wintermute
NUSER="${USER%%<!*}"
使用shell变量操作速度快了很多,在这种情况下打开一个子shell和sed的作用(但不是你的要求的确切答复要求使用SED)
我明白了。我在BASH很新,但它很有趣。对不起,如果这是一个愚蠢的问题,非常感谢:) – Neekoy