如何选择两个标记图案之间的线条,这些线条可能会出现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,则打印该行。
有关更详细的说明和示例,以及模式显示与否的情况,请参阅如何选择两种模式之间的线条?。
慕田峪4524236
TA贡献1875条经验 获得超5个赞
使用sed
:
sed -n -e '/^abc$/,/^mno$/{ /^abc$/d; /^mno$/d; p; }'
该-n
选项意味着默认情况下不打印。
该模式查找包含只是行abc
,只是mno
,然后执行该动作{ ... }
。第一个动作删除该abc
行; 第二mno
行; 并p
打印剩余的行。您可以根据需要放松正则表达式。的范围之外的任何行abc
.. mno
根本不打印。
- 3 回答
- 0 关注
- 400 浏览
添加回答
举报
0/150
提交
取消