我试图删除BASH中某些变量的内容。特别是我想从变量$ USER:
中删除部分后面的部分<username><![CDATA[
我的代码如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我使用反斜杠来转义特殊字符(我不确定是否正确),并希望从$ USER中删除提到的部分并将结果分配给变量$ NUSER。 / p>
请帮助。 :)
答案 0 :(得分:3)
如果$USER
是包含您要编辑的值的文件的名称,那么您尝试的方式(减去一些多余的反斜杠)将起作用。由于值在变量本身中,因此必须将其传递给sed的stdin,如下所示:
NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//')
$()
与反引号相同,但我更喜欢这种语法,因为它更容易嵌套。
请注意,如果echo "$USER"
具有$USER
选项的值(例如echo
或-n
),-e
会导致问题。如果这是一个担心,请看看Jonathan Leffer的解决方案,其中包含特定于bash的字符串。
答案 1 :(得分:2)
Wintermute在另一个answer中建议“无处不在”的解决方案。
仅Bash解决方案使用here-string代替 - 这是<<<
符号:
NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER")
它的优点是避免了子shell中的第二个进程。
答案 2 :(得分:2)
NUSER="${USER%%<!*}"
在这种情况下使用shell变量操作更快,打开子shell和sed操作(但这不是对请求使用sed的请求的确切回复)