用sed

时间:2017-08-08 08:19:24

标签: linux bash sed

我尝试使用sed替换字符串中的所有美元符号。但是,不仅美元符号被替换,而且随后是整个字符串。

$ echo "abc $def ghi" | sed 's/$//g'
$ abc ghi

如果至少有一个数字跟随美元符号,则只有第一个非数字被替换之前的部分:

$ echo "abc $123def ghi" | sed 's/$//g'
$ abc def ghi

发生了什么事?

3 个答案:

答案 0 :(得分:12)

echo 'abc $def ghi' | sed 's/\$//g'

在echo中使用单引号,如果不是,则表示存在变量def及其替换,如果没有变量def则为空。在sed中,你需要转义美元符号,否则它意味着“锚定到行尾。”

答案 1 :(得分:1)

如果您只想从字符串中删除字符“$”,则可以使用Shell参数扩展替代方法。例如:

v1='abc $def ghi'
v2='abc $123def ghi'
echo ${v1/$/}
echo ${v2/$/}

语法为:$ {parameter / pattern / string}

如果您想了解有关Shell Parameters Expansion的更多信息,请查看: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion

答案 2 :(得分:0)

tr应该用于此任务,而不是sed

将其与echo中的单引号一起使用以防止参数扩展。

echo 'abc $123def ghi' | tr -d "$"