きれいなテキストファイルを使用しようとしています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