0

例として以下の内容のファイルがあります

cat test.log
hello
how are you?
terminating
1
2
3
terminating
1
2

終了後にgrepコマンドを使用して出力を表示すると、次のように表示されます。

sed -n '/terminating/,$p' test.log

terminating
1
2
3
terminating
1
2

以下のように出力したい

terminating
1
2

誰でもこれについて私を助けてもらえますか?

4

3 に答える 3

3

のコード:

$ sed -n '/terminating/{N;N;h};${g;p}' ファイル
終了中
1
2

行が一致する場合terminatingは、それと次の 2 行をホールド スペースに格納します。に 3 行を印刷し$EOFます。


sedスクリプトの例:

$ cat script.sed
/終了中/{
N
N
時間
}
${
g
p
}

$ sed -nf script.sed ファイル
終了中
1
2

そして、最後の の後のすべての行についてterminating:

$ 猫ファイル
猫のテストログ
こんにちは
元気ですか?
終了中
1
2
3
終了中
1
2
3
4
5
6

$ cat script.sed
H
/終了中/{
時間
}
${
g
p
}

$ sed -nf script.sed ファイル
終了中
1
2
3
4
5
6
于 2013-07-15T07:00:42.507 に答える
0
sed -n 'H;/terminating/x;${x;p}' test.log

注釈付き疑似コードとして:

for each line:
    append the line to the hold space     H
    if line matches /terminating/         /terminating/
       then set hold space to line        x
    on the last line:                     $
        get the hold space                x
        and print                         p

注:x実際にはホールド/パターン スペースを交換します。

于 2013-07-15T06:46:26.470 に答える