猿问

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

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

使用awksed如何选择两种不同标记图案之间的线条?可能有多个标有这些图案的部分。

例如:假设文件包含:

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>

有没有办法在sedawk 反复做,直到文件的结尾?


慕婉清6462132
浏览 401回答 3
3回答

心有法竹

使用awk标志在必要时触发打印:$&nbsp;awk&nbsp;'/abc/{flag=1;next}/mno/{flag=0}flag'&nbsp;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

使用sed:sed&nbsp;-n&nbsp;-e&nbsp;'/^abc$/,/^mno$/{&nbsp;/^abc$/d;&nbsp;/^mno$/d;&nbsp;p;&nbsp;}'该-n选项意味着默认情况下不打印。该模式查找包含只是行abc,只是mno,然后执行该动作{ ... }。第一个动作删除该abc行;&nbsp;第二mno行;&nbsp;并p打印剩余的行。您可以根据需要放松正则表达式。的范围之外的任何行abc..&nbsp;mno根本不打印。

翻阅古今

这可能适合你(GNU sed):sed&nbsp;'/^abc$/,/^mno$/{//!b};d'&nbsp;file删除除开始abc和之间的行之外的所有行mno
随时随地看视频慕课网APP
我要回答