如何用sed替换带有美元标记的短语

时间:2015-09-22 07:20:34

标签: regex bash sed

为了替换短语,我只使用:

sed -i "s:phrase_to_be_matched*:phrase_to_be_replaced_with:g" file_name

这样可以正常工作,直到我遇到以下问题:

我在文件中有一行,

#$ModLoad imudp

我想要的,

$ModLoad imudp

我目前正在运行此功能,

sed -i "s:.*$ModLoad imudp.*:$ModLoad imudp:g" file

但我得到了:

 imudp

我知道,这种情况正在发生,因为$ModLoad imudp被视为一个变量,因为它不存在,我得到了这个输出。

我也试过"$ModLoad imudp",但结果相同。

我无法删除#,因为我的文件中有其他注释行。

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

尝试使用单引号''而不是双引号。

sed -i 's:.*$ModLoad imudp.*:$ModLoad imudp:g' file

这可以防止$对变量扩展的特殊含义。

修改根据@ tripleee的评论

还要转义$以匹配文字美元符号

sed -i 's:.*\$ModLoad imudp.*:$ModLoad imudp:g' file