我是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不起作用。我做错了什么?
由于
答案 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$
在替换字符串中,\
应该被转义,否则单个\
将转义旁边的.
。