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

Replace 使用sed在文本文件中查找和替换,replace,sed,find,Replace,Sed,Find,我是sed的新手 我有一个文本文件,我想替换出现的此字符串: allow ^127\.0\.0\.1$ allow ^107\.21\.206\.35$ 使用此字符串: 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不起作用。我做错了什么 谢谢您必须转义“^”和“$”: $ sed

我是sed的新手

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

allow ^127\.0\.0\.1$
allow ^107\.21\.206\.35$
使用此字符串:

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不起作用。我做错了什么


谢谢

您必须转义“^”和“$”:

$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt $sed's/allow\^127.0.0.1\$/allow\^107.21.206.35\$/g'test.txt 如果不进行scaped,则“^”匹配行首,“$”匹配行尾。为了精确匹配字符,它们必须用“\”转义。sed的大多数实现都使用基本正则表达式,其中必须对以下字符进行转义才能进行字面匹配:
^.[$()|*+?{\
您必须转义“^”和“$”:

$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt $sed's/allow\^127.0.0.1\$/allow\^107.21.206.35\$/g'test.txt 未转义时,“^”匹配行首,“$”匹配行尾。为了精确匹配字符,它们必须用“\”转义。大多数sed实现都使用基本正则表达式,其中必须转义以下字符才能逐字匹配:
^.[$()|*+?{\

这可能适合您:

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

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

这可能适用于您:

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

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

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

$ 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$

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

不仅应转义
\
(使用另一个反斜杠),还应转义
(正则表达式将
视为“匹配任何单个字符”)。正则表达式中还保留了
^
$
字符

$ 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$

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

是否要对文件本身进行更改?如果是,则需要
-i
选项。是否要对文件本身进行更改?如果是,则需要
-i
选项。@Monty:i没有注意到您的输入文本中有文字“\”。@蒙蒂:我没有注意到您的输入文本中有文字“\”。@波东的观点很好,在上面的示例中,没有必要在sed的正则表达式中转义第一个
^
。但是
^
也是集合中的否定运算符,在该上下文中也应该转义。@poto很好,在上面的示例中,没有必要转义sed的正则表达式中的第一个
^
。但是
^
也是集合中的否定运算符,并且在该上下文中也应该转义。