sedで一致するものが見つかった場合は、2行をスキップします。

sedで一致するものが見つかった場合は、2行をスキップします。

きれいなテキストファイルを使用しようとしていますsed

pingを実行してテキストファイルに出力するプログラムがあります。プログラムは、ping出力の後にタイムスタンプを追加して、いつ失敗するのかを知ることができます。

pingの失敗と下の2行、上の行を除くすべてのエントリを削除する必要があります。私の表現に合ったら、sed次の2行をスキップする方法はありませんか?

例:

--- 8.8.8.8 ping statistics ---
rtt min/avg/max/mdev = 18.001/21.159/26.006/2.959 ms
Tue 26 Nov 09:39:56 GMT 2019


--- 4.2.2.2 ping statistics ---
10 packets transmitted, 9 received, 10% packet loss, time 18034ms
rtt min/avg/max/mdev = 20.560/34.013/70.076/17.428 ms
Tue 26 Nov 09:40:46 GMT 2019

--- 8.8.8.8 ping statistics ---
rtt min/avg/max/mdev = 17.510/20.543/26.618/2.317 ms
Tue 26 Nov 09:41:04 GMT 2019

以下を使用する場合: sed '/loss/!d' pingFailed.txt > pingFailed1.txt

その後、私の出力は次のようになります。

10 packets transmitted, 4 received, 60% packet loss, time 18103ms
10 packets transmitted, 3 received, 70% packet loss, time 18107ms

ただし、出力は次のようになります。

--- 4.2.2.2 ping statistics ---
10 packets transmitted, 9 received, 10% packet loss, time 18034ms
rtt min/avg/max/mdev = 20.560/34.013/70.076/17.428 ms
Tue 26 Nov 09:40:46 GMT 2019

どうすればこれを行うことができますか(好ましくはからsed)?

ベストアンサー1

この方法があなたに合っているかどうか教えてください。

grep -B1 -A2 "loss" pingFailed.txt > pingFailed1.txt

出力:

--- 4.2.2.2 ping statistics ---
10 packets transmitted, 9 received, 10% packet loss, time 18034ms
rtt min/avg/max/mdev = 20.560/34.013/70.076/17.428 ms
Tue 26 Nov 09:40:46 GMT 2019

「損失」パターンのある行を見つけます。

grep "loss"

一行を印刷する第二前に:

-B1

2行を印刷する後:

-A2

おすすめ記事