29

我无法弄清楚如何使用sed来搜索和替换/文本文件中包含该字符的字符串/etc/myconfig

例如,在我现有的文本文件中,我有:

myparam /path/to/a argB=/path/to/B xo

我希望将其替换为:

myparam /path/to/c argB=/path/to/D xo

我尝试在 bash 中这样做:

line='myparam /path/to/a argB=/path/to/B xo'
line_new='myparam /path/to/c argB=/path/to/D xo'
sed -i 's/$line/$line_new/g' /etc/myconfig

但什么也没有发生。

尝试

grep -rn "$line" /etc/myconfig

不过确实返回了我'myparam /path/to/a argB=/path/to/B xo'

表达我的sed命令以执行此搜索和替换并正确处理命令的正确方法是什么/?(我认为/我的字符串中的字符是给我带来问题的字符,因为我使用类似的sed命令来搜索和替换文本文件中的另一行没有问题,并且该行没有/字符。

4

2 回答 2

44
于 2012-04-25T05:52:13.747 回答
15

This might work for you:

sed -i "s|$line|$line_new|g" /etc/myconfig

You must use "'s so that the $line and $new_line are interpolated. Also use | or any character not found in the match or replacement strings as a delimiter.

于 2012-04-25T05:56:39.947 回答