Replace 使用sed在文本文件中查找和替换
我是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
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的正则表达式中的第一个^
。但是^
也是集合中的否定运算符,并且在该上下文中也应该转义。