使用sed在文本文件中查找和替换

时间:2012-01-19 12:46:34

标签: replace sed find

我是sed的新手。

我有一个文本文件,我想替换此字符串的出现位置:

allow ^127\.0\.0\.1$

使用此字符串:

allow ^107\.21\.206\.35$

我使用的代码如下:

sed 's/allow ^127\.0\.0\.1$/allow ^107\.21\.206\.35$/g' test.txt

然而,id不起作用。我做错了什么?

由于

3 个答案:

答案 0 :(得分:1)

你必须逃避'^'和'$':

$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt

未转义,'^'匹配行的开头,'$'匹配行尾。为了准确匹配角色,必须使用'\'进行转义。 sed的大多数实现都使用基本的正则表达式,其中必须转义以下字符才能按字面意思匹配: ^.[$()|*+?{\

答案 1 :(得分:0)

这可能对您有用:

echo 'allow ^127\.0\.0\.1$' | 
sed 's/allow ^127\\.0\\.0\\.1\$/allow ^107\\.21\\.206\\.35$/'
allow ^107\.21\.206\.35$

^$只需要在替换命令的匹配部分中进行转义,如果它们分别位于字符串的前面和后面。 \需要在匹配和替换中进行转义。

答案 2 :(得分:0)

您不仅要逃避\(使用另一个反斜杠),还应该.(正则表达式将.视为“匹配任何单个字符”)。 ^$字符也在正则表达式中保留。

$ echo "allow ^127\.0\.0\.1$" > /tmp/test
$ cat /tmp/test
allow ^127\.0\.0\.1$
$ sed 's/allow \^127\\\.0\\\.0\\\.1\$/allow ^107\\.21\\.206\\.35$/g' -i /tmp/test
$ cat /tmp/test
allow ^107.21.206.35$

在替换字符串中,\应该被转义,否则单个\将转义旁边的.