如果替换后该行会变为空,则删除该行
举一个很小的例子,假设我有如下内容:
s/foo//g
然后用它执行 perl -p,以及以下输入:
foo foo foo
foo bar
bar bar
foo bar bar
foo
这将输出:
bar
bar bar
bar bar
仅由foo组成的行现在变成空白行(如果行内原本存在空格,则保留这些空格)。对于这些行,我想把它们删除,但要保留原本就为空白的行。
一种做法是把 foo 替换为某个特殊识别的字符串,例如 X,然后删除仅由 X 组成的行,但要针对通用输入选取合适的字符串(而不是 X)将是一个挑战。并且这还需要两次遍历,乐趣就不那么多了。
解决方案
除非你不在意围绕“foo”的部分空白字符,否则就把它们全部删除。这样也会把换行符删掉。-p 仍然会输出这一行,但这一行将只是一个空字符串。
$ cat a.txt
foo foo foo
foo bar
bar bar
foo bar bar
foo
$ perl -pe's/\s*foo\s*//g' a.txt
bar
bar bar
bar bar
\s* 将匹配0 次或多次空白字符。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。