我尝试使用sed替换字符串中的所有美元符号。但是,不仅美元符号被替换,而且随后是整个字符串。
$ echo "abc $def ghi" | sed 's/$//g'
$ abc ghi
如果至少有一个数字跟随美元符号,则只有第一个非数字被替换之前的部分:
$ echo "abc $123def ghi" | sed 's/$//g'
$ abc def ghi
发生了什么事?
答案 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 "$"