![如何进行 sed 模式匹配并在最后一次匹配后停止](https://linux22.com/image/104597/%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%20sed%20%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B9%B6%E5%9C%A8%E6%9C%80%E5%90%8E%E4%B8%80%E6%AC%A1%E5%8C%B9%E9%85%8D%E5%90%8E%E5%81%9C%E6%AD%A2%20.png)
我有一个巨大的日志文件,可以一遍又一遍地重复值。我想 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 sed
4.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)