例としてroute
を使用します。
route -n
上記はルーティング情報を出力します。一番上の行はアクティブな接続です。以下を実行することで、2番目の列への出力を操作できます。
route -n | awk '{print $2}'
今、どのように行でフィルタリングできますか?
特定の行を印刷するには、sed
を使用できます。
route -n | sed -n 2p
2行目を印刷します。
sed
、何ですかsed
とは何かについて、短く不完全な説明をします。完全な説明については、sed
情報ページを参照することをお勧めします(info sed
を実行)。
sed
mean streameditor、つまり、行動できるエディタテキストデータのストリーム(またはパイプ)。ただし、ファイルに対しても機能します。これは、実質的に(ed
とは異なり)前の行に戻ることができないことを意味します。
sed
は、awk
が一度に1行を読み取り、その行にスクリプトを適用して変更する可能性があるためです。スクリプトの最後に、デフォルトで変更された行が標準出力に出力されます。その後、sed
は次の行に進みます。
スクリプトはアドレスとコマンドのペアのシーケンスであり、行がアドレスと一致する場合、コマンドが実行されます。
sed
の一般的な使用法は、パターンを何かで置き換えることです。
command | sed 's/ *$//'
ここで、単一引用符で囲まれた文字列は、単一のアドレスとコマンドのペアで構成されるスクリプトです。アドレスがありません(s
の前に表示されます)。このような場合、コマンドはデフォルトですべての入力行に適用されます。 s
はコマンドであり、文字列の残りはコマンド固有の命令であり、「行の末尾にスペース()文字(0 [SOME_CODE] _)を0個以上(*
)置換($
)それらを削除します)」。
他の便利なコマンドはp
およびd
です。 p
コマンドは現在の行を出力します。これは、スクリプトの最後に現在の行を出力するようにデフォルトの動作を変更する-n
オプションと組み合わせて使用すると便利です。だから
sed -n '2p'
スクリプトは、アドレス2p
およびコマンドp
で構成される文字列2
であるため、-n
オプションにより、行2が印刷され、代わりに他のすべての行は印刷されません。 。
d
コマンドは、たとえば、行を削除します
sed '3,6d'
3番目から6番目までのすべての行を削除します。 3,6
はアドレス範囲です。この場合、他のすべての行を出力するため、-n
オプションを使用しないでください。
最後に、アドレスは次のようなパターンにすることができます
sed -n '/^#/p'
このコマンドは、^
文字で始まる(#
)すべての行を出力します。
Grepにパイプして目的のIPアドレスで始まる行を見つけることで、INの行をフィルター処理できます。たとえば、192.168.1.1の行を表示する場合は、次のようにします。
$ route | grep ^192.168.1.0
192.168.1.0 * 255.255.255.0 U 2 0 0 wlan0
「^」マークは「line-starts-with」を意味します。したがって、より一般的になる可能性があります。
$ route | grep ^192.168.1
192.168.1.0 * 255.255.255.0 U 2 0 0 wlan0
192.168.111.0 * 255.255.255.0 U 0 0 0 virbr0
正規表現を使用して、希望する行をawkに伝えることができます。
route -n | awk '/^192.168/ {print $2}'
192.168
で始まるすべての行の秒列を出力します
awkの回答も次のようになります。
$0 ~ ( /matchthis/ ) { print $2 }
$ 0は単に行/行全体を指します
sedとawkは非常に強力な組み合わせになります
正規表現は習得する価値がある