我有一个巨大的日志文件,可以一遍又一遍地重复值。我想 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)