为了替换短语,我只使用:
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"
,但结果相同。
我无法删除#
,因为我的文件中有其他注释行。
如何解决这个问题?
答案 0 :(得分:3)
尝试使用单引号''
而不是双引号。
sed -i 's:.*$ModLoad imudp.*:$ModLoad imudp:g' file
这可以防止$
对变量扩展的特殊含义。
修改(根据@ tripleee的评论)
还要转义$
以匹配文字美元符号
sed -i 's:.*\$ModLoad imudp.*:$ModLoad imudp:g' file