値を繰り返し繰り返す巨大なログファイルがあります。 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
sed
OpenBSDまたは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)