1

avahi を使用して、ネットワーク範囲の IP アドレスのリストを作成しました。入力された情報は、sed を使用して洗練され、次の出力が得られます。

Initial data = address = [xxx.xxx.xxx.xxx]
Refined data = xxx.xxx.xxx.xxx

そのためのコマンドは次のとおりです。

avahi-browse -alrt | grep -w address | sort -u | sed -e 's/address = //' | sed -e 's/\[//' | sed -e 's/\]//'

これはほとんどの場合正しく機能しますが、奇妙な場合に xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx のようなアドレスがリストに表示され、省略したいと思います。

正規表現または何かを使用して、データが常に有効な IP、つまり xxx.xxx.xxx.xxx と一致することを確認できることはわかっていますが、これについてどうすればよいかわかりません。どんな助けでも大歓迎です。

このコマンドは、bash スクリプトを使用して Linux で実行されます。有効な IP アドレスのみを xxx.xxx.xxx.xxx 形式で返したいと思います。

4

3 に答える 3

2

3 つの sed コマンドを次のコマンドに置き換えます。

sed 's/address = \[\|\]//g' 

また:

sed -r 's/address = \[|\]//g' 

編集:無効なIPを削除するには、次のsedも使用します:

sed -r -e 's/address = \[|\]//g' -e 's/= +([^:]+\:){5,}.*$/=/' file
于 2013-11-13T13:36:48.933 に答える
1
avahi-browse -alrt | sed -n "/address/ s/address = \[\(\([012]\{0,1\}[0-9]\{0,1\}[0-9]\.\)\{3\}[12]\{0,1\}[0-9]\{0,1\}[0-9]\)\].*/\1/p" | sort -u

sort は以前に実行できましたが、sed は行をフィルタリングすることもできるため、sed および grep が不要になった後は確かに高速です。(ここではシェルではないため、テストされていません)

于 2013-11-13T21:14:28.107 に答える
1

sed3 つのコマンドを次のコマンドに置き換えてみてください

sed -nr 's/.*address = \[(([0-9]{1,3}\.){3}[0-9]{1,3})\].*/\1/p'
于 2013-11-13T18:00:55.930 に答える