用 Sed 替换变量的内容
Replace content of variable with Sed
我正在尝试删除 BASH 中变量的一些内容。特别是我想从变量 $USER:
中删除以下部分
<username><![CDATA[
我的代码如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我正在使用反斜杠转义特殊字符(我不确定这是否正确),并想从 $USER 中删除提到的部分并将结果分配给变量 $NUSER。
请帮忙。 :)
如果 $USER
是包含您要编辑的值的文件的名称,您尝试的方式(减去一些多余的反斜杠)将起作用。由于该值在变量本身中,因此您必须像这样将其通过管道传递给 sed 的标准输入:
NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//')
$()
与反引号的作用相同,但我更喜欢这种语法,因为它更容易嵌套。
请注意,如果 $USER
具有 echo
选项的值(例如 -n
或 -e
),echo "$USER"
会导致问题。如果担心这一点,请查看 Jonathan Leffer 使用 bash-specific here-strings 的解决方案。
'works everywhere' 解决方案由 Wintermute in another 建议。
仅 Bash 的解决方案使用 here-string 来代替——这就是 <<<
表示法:
NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER")
它的优点是避免了子进程中的第二个进程shell。
NUSER="${USER%%<!*}"
在这种情况下,使用 shell 变量操作比打开 subshell 和 sed 操作要快得多(但这不是对要求使用 sed 的请求的确切答复)
我正在尝试删除 BASH 中变量的一些内容。特别是我想从变量 $USER:
中删除以下部分<username><![CDATA[
我的代码如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我正在使用反斜杠转义特殊字符(我不确定这是否正确),并想从 $USER 中删除提到的部分并将结果分配给变量 $NUSER。
请帮忙。 :)
如果 $USER
是包含您要编辑的值的文件的名称,您尝试的方式(减去一些多余的反斜杠)将起作用。由于该值在变量本身中,因此您必须像这样将其通过管道传递给 sed 的标准输入:
NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//')
$()
与反引号的作用相同,但我更喜欢这种语法,因为它更容易嵌套。
请注意,如果 $USER
具有 echo
选项的值(例如 -n
或 -e
),echo "$USER"
会导致问题。如果担心这一点,请查看 Jonathan Leffer 使用 bash-specific here-strings 的解决方案。
'works everywhere' 解决方案由 Wintermute in another
仅 Bash 的解决方案使用 here-string 来代替——这就是 <<<
表示法:
NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER")
它的优点是避免了子进程中的第二个进程shell。
NUSER="${USER%%<!*}"
在这种情况下,使用 shell 变量操作比打开 subshell 和 sed 操作要快得多(但这不是对要求使用 sed 的请求的确切答复)