为了账号安全,请及时绑定邮箱和手机立即绑定

如何选择两个标记图案之间的线条,这些线条可能会出现awk / sed多次

如何选择两个标记图案之间的线条,这些线条可能会出现awk / sed多次

慕婉清6462132 2019-07-25 14:14:35
如何选择两个标记图案之间的线条,这些线条可能会出现awk / sed多次使用awk或sed如何选择两种不同标记图案之间的线条?可能有多个标有这些图案的部分。例如:假设文件包含:abc def1 ghi1 jkl1 mno abc def2 ghi2 jkl2 mno pqr stu并且起始模式是abc和结束模式是mno So,我需要输出为:def1 ghi1 jkl1 def2 ghi2 jkl2我使用sed匹配模式一次:sed -e '1,/abc/d' -e '/mno/,$d' <FILE>有没有办法在sed或awk 反复做,直到文件的结尾?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

使用awk标志在必要时触发打印:

$ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file
def1
ghi1
jkl1
def2
ghi2
jkl2

这是如何运作的?

  • /abc/匹配具有此文本的行,以及具有此文本的行/mno/

  • /abc/{flag=1;next}设置flag文本abc的找到时间。然后,它跳过了这条线。

  • /mno/{flag=0}取消找到flag文本的mno时间。

  • 最后一个flag是带有默认操作的模式,即print $0:如果flag等于1,则打印该行。

有关更详细的说明和示例,以及模式显示与否的情况,请参阅如何选择两种模式之间的线条?


查看完整回答
反对 回复 2019-07-26
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞


使用sed

sed -n -e '/^abc$/,/^mno$/{ /^abc$/d; /^mno$/d; p; }'

-n选项意味着默认情况下不打印。

该模式查找包含只是行abc,只是mno,然后执行该动作{ ... }。第一个动作删除该abc行; 第二mno行; 并p打印剩余的行。您可以根据需要放松正则表达式。的范围之外的任何行abc.. mno根本不打印。




查看完整回答
反对 回复 2019-07-26
?
翻阅古今

TA贡献1780条经验 获得超5个赞

这可能适合你(GNU sed):

sed '/^abc$/,/^mno$/{//!b};d' file

删除除开始abc和之间的行之外的所有行mno


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 376 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信