如果替换后该行会变为空,则删除该行

编程语言 2026-07-09

举一个很小的例子,假设我有如下内容:

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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章