sed パターンマッチングを実行し、最後のマッチ後に停止する方法

sed パターンマッチングを実行し、最後のマッチ後に停止する方法

値を繰り返し繰り返す巨大なログファイルがあります。 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 4.2.2 を使用してsedコピーすることはできません。

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

sedOpenBSDまたは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)

関連情報