IPアドレス範囲検索を使用するにはsed
?
たとえば、
sed '/85.159.56/s/$/ --- API SYSTEMS/'
その後、85.159.56で始まるIPアドレスを見つけてその横に印刷します。 --- APIシステム
フィルタリングする範囲がありますが、次から間または超過を適用する方法がわかりませんsed
。
sed '/192.200.160.0 - 192.200.191.255/s/$/ --- APIv2 SYSTEMS/'
答え1
数値範囲には次の式が必要なため、正規表現には適していません。
gsed '/192\.200\.1\([6-8][0-9]\|9[01]\)\./s/$/ --- APIv2 SYSTEMS/'
160と191の間の値を一致させるには、式を生成できるコードを書くのが理想的です。これらの式を手動で作成または変更すると、人が間違える可能性が非常に高いためです。より良いソリューションは、IPアドレスを理解し、PerlなどのCIDR表記をサポートするソリューションです。ネットワークアドレス::IP次に、IPアドレスを解析し、そのアドレスが->within
他の場所で解析された範囲であることを確認します。
答え2
短い(非SED)回答
申し訳ありませんが、それは私が一行にできる最善です。明らかにこれはSEDではありません。
perl -MNetAddr::IP -i.bak -nle '$re=NetAddr::IP->new("85.159.56.0/24")->re(); if(/$re/){ print $_ . " --- APIv2 SYSTEMS"}else{print}' yourfile.txt
何ができるか
その後、サブネット「85.159.56.0/24」を正規表現に変換し、その式の各行をテストし、一致するものがある場合は、行の末尾に「---APIv2 SYSTEMS」を追加します。
- "-Mmodule"は、コードを実行する前にモジュールをロードします。
- 「-i.bak」は、ファイル(yourfile.txt)を変更してyourfile.txt.bakにバックアップすることを意味します。
- "-n"はPerlにプログラムを繰り返すようにし、sed -nやawkなどのファイル名引数を繰り返すようにします。
- "-s"を使用すると、プログラムの外部でパラメータを設定できます。
- そして「---variable=X」が設定方法です。
- "-l" は怠惰で入力行を削除し、すべての出力にキャリッジリターンを追加するためです。
- 最後の '-e'print "I'm a one-liner"' はコードを保持するビットです。
ただ正規表現
正規表現のみが必要な場合(grepやsed / awkなどに使用されます):
perl -MNetAddr::IP -lse 'print NetAddr::IP->new($range)->re()' -- -range=85.159.56.0/24
気になる場合は、次のように出力します。
(?:(?<![0-9])85\.159\.(?:56)\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?![0-9]))
前提条件
cpanからNetAddr :: IPモジュールをインストールする必要があるかもしれないことに注目する価値があります。メモリ不足でcpanmを使用しましたが、構文は同じです。
sudo cpanm install NetAddr::IP
結論
SEDとAWKは素晴らしいツールです。これに関する本は2冊あり、必要に応じて使用しようとしますが、Perlは通常、一連のモジュールと完全な単一コード行であなたをサポートします。私はPythonにそのようなツールがあると確信していますが、私はPerlファンです。私もお勧めできますか?http://explainshell.com私はしばしば誰かが私に走るように頼むものを見つけるためにこれを使用します。コマンドとさまざまなスイッチ/パラメータを使用して、マニュアルページの関連部分のみを表示します。