在 awk/sed/grep 中删除匹配的第 n 行直到空行
我需要删除文件中从匹配到下一个空白行的第 n 个匹配行(即从第 n 个匹配开始的一大块空白行分隔文本)。
I need to delete the nth matching line in a file from the match up to the next blank line (i.e. one chunk of blank line delimited text starting with the nth match).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这将删除以第四个空行开始和结束的空白行的文本块。它还删除那些分隔线。
更改第一个
/^$/
以更改开始匹配。更改第二个即可更改最终匹配。给定以下输入:
此版本的命令:
将给出以下结果:
编辑:
我从
sed
命令中删除了无关的b
指令多于。这是一个带注释的版本:
任何明确的模式都应该适用于开始和结束标记。它们可以相同或不同。
This will delete a chunk of text that starts and ends with a blank line starting with the fourth blank line. It also deletes those delimiting lines.
Change the first
/^$/
to change the start match. Change the second one to change the end match.Given this input:
This version of the command:
would give this as the result:
Edit:
I removed an extraneous
b
instruction from thesed
commands above.Here's a commented version:
Any unambiguous pattern should work for the begin and end markers. They can be the same or different.
-00
是以“段落”模式读取文件(记录分隔符是一个或多个空行)$`
是 Perl 的“预匹配”特殊变量(文本在匹配模式的前面)-00
is to read the file in "paragraph" mode (record separator is one or more blank lines)$`
is Perl's special variable for the "prematch" (text in front of the matching pattern)在 AWK
中将其转换
为
:删除“m1”的第三个块...
在此处在 ideone 上运行
哈!
In AWK
Transforms this:
into this:
deleting the third block of "m1" ...
Running on ideone here
HTH!
强制性 awk 脚本。只需将
n=2
更改为您的第 n 个匹配项即可。输入
输出
Obligatory awk script. Just change
n=2
to whatever your nth match should be.Input
Output