如何进行 sed 模式匹配并在最后一次匹配后停止

如何进行 sed 模式匹配并在最后一次匹配后停止

我有一个巨大的日志文件,可以一遍又一遍地重复值。我想 grep 一组单词 A 到单词 D,但在匹配后停止。下面又重新开始。

sed -n -e '/Word A/,/Word D/ p'

找到第一个“Word D”后如何让它停止

Word A
Word B
Word C
Word D
Word E
Word F
Word D
Word G

sed -n -e '/Word A/,/Word D/ p' 的预期结果

Word A
Word B
Word C
Word D

实际结果:

Word A
Word B
Word C
Word D
Word E -> should not exist
Word F -> should not exist
Word D -> should not exist
Word G -> should not exist

答案1

无法使用 GNU sed4.2.2 进行复制:

home:~/scratch/
$ sed -ne '/Word A/,/Word D/p' input
Word A
Word B
Word C
Word D
home:~/scratch/
$ cat input
Word A
Word B
Word C
Word D
Word E
Word F
Word D
Word G

答案2

我无法使用 OpenBSDsed或 GNU重现此问题sed

如果数据是

字A
字B
字C
字D
字E
字F
字A
字D
字G

(注意额外的Word A一行)

$ sed -n -e '/Word A/,/Word D/p' data.in
Word A
Word B
Word C
Word D
Word A
Word D

如果您只想要该输出的第一位:

$ sed -n -e '/Word A/,/Word D/p' -e '/Word D/q' data.in
Word A
Word B
Word C
Word D

答案3

我发现我的问题是转义字符不正确。感谢大家的提示

for /f "tokens=* " %%e in ('sed -n "/\/ios\/mdm2\/%Perimeter%.*DEBUG MDM payload/,/<\/plist>/p" %log%') do ( echo %%e > file.txt)

相关内容