パターンを含む行を次の行に置き換えます。

パターンを含む行を次の行に置き換えます。

現在、私の周りの無線ネットワークに関するいくつかの情報を出力する次のコードがあります。

sudo iw wlan0 scan | sed -nr '/SSID: |signal: |primary channel: /p' | sed 's/^[\t]*//g' | sed 's/^SSID: //' | sed 's/signal: / * signal: /'

(コードが長すぎたり、混乱していてもご了承ください。) 出力はおおよそ次のようになります。

 * signal: -61.00 dBm
<network 1 name>
 * primary channel: 10
 * signal: -37.00 dBm
<network 2 name>
 * primary channel: 1
 * signal: -80.00 dBm
<network 3 name>
 * primary channel: 11
 * signal: -90.00 dBm
<network 4 name>
 * primary channel: 11

iw wlan0 scanただし、コマンドのネイティブ形式のため、各ネットワークの信号強度は実際のネットワーク名の前に印刷されます。私が望む結果は次のとおりです。

<network 1 name>
 * signal: -61.00 dBm
 * primary channel: 10
<network 2 name>
 * signal: -37.00 dBm
 * primary channel: 1
<network 3 name>
 * signal: -80.00 dBm
 * primary channel: 11
<network 4 name>
 * signal: -90.00 dBm
 * primary channel: 11

この結果をどのように取得できますか?どういうわけかパターンを検索* signal:したら、その行を次の行に置き換えることができるようですが、これを行う方法がわかりません。

(可能であれば、他のコマンドのように私のコマンドの最後に追加できることを望みますsed。そうでなければ、bashのすべてのソリューションが開いています)

<network # name>編集:上記では、これは私の周りのネットワークからいくつかの名前を削除し、そこにある実際のネットワーク名を表すものだと言いました。デフォルトでは、ネットワーク名のある行にはネットワーク名のみが含まれ、「<」や「>」などは含まれません。

ベストアンサー1

GNU sedを使ってこれを試してください:

sed -ne '/signal:/{h;b};/^[^ ]/{p;x};p' file

望むより:man sed

おすすめ記事