【发布时间】:2021-07-07 04:24:25
【问题描述】:
我有一个名为“data”的文本文件,内容如下:
a
b
c
abc
我想找到所有“abc”(不需要在同一行)并将前导“a”替换为“A”。这里的“b”可以是任何字符(一个或多个),但不能是“c”。
(这是我实际用例的简化。)
我认为这个 perl 命令会做
perl -pi.bak -e 's/a([^c]+?)c/A\1c/mg' data
有了这个“数据”就变成了:
a
b
c
Abc
我期待:
A
b
c
Abc
我不确定为什么 perl 错过了第一次出现(在第 1-3 行)。
如果您发现我的 perl 命令有任何问题,或者您知道可行的替代方法,请告诉我。非常感谢。
【问题讨论】:
-
你需要
perl -0777pe 's/a([^c]+)c/A$1c/g'或perl -0pe 's/a([^c]+)c/A$1c/g' -
(您不需要删除其他问题。即使是重复的问题也可以帮助人们,因为他们可能会在搜索中找到已关闭的问题,这将引导他们找到答案。)跨度>