grep -o 問題

grep -o 問題

以下のテキストファイルがあります。

    192.168.10.1
   192.168.45.45
    192.168.255.255
    192.168.0.5
    Random text comes here   8.8.8.8
    224.23.25.12
    225.1.2.3
    226.0.0.0
    227.1.2.6
    227.25.25.26
    228.145.123.45
    229.255.255.255

Random text come here 172.32.255.255
231.25.12.12
232.45.13.45
238.0.0.0
233.1.2.3
234.255.255.255
236.123.123.123
237.153.125.155
235.235.235.255
239.239.239.10
172.21.255.255
172.31.10.10
172.16.32.21
Random text comes here 206.32.14.25

私はすべてのパブリックIPアドレスをフィルタリングするためにgrepコマンドを使用しています。私の出力は次のようになります

8.8.8.8
172.32.255.255
206.32.14.25

-o フラグを使用しない場合、コードは正常に動作します。ただし、パターンのみを取得するために-oフラグを追加すると、出力は得られません。

パスワード

egrep -vo  '172\.1[6-9]([\.][0-9]{1,3}){2}|172\.2[0-9]([\.][0-9]{1,3}){2}|172\.3[01]([\.][0-9]{1,3}){2}|10([\.][0-9]{1,3}){3}|192\.168([\.][0-9]{1,3}){2}|22[456789]([\.][0-9]{1,3}){3}|23[0-9]([\.][0-9]{1,3}){3}' private_ip

これにご協力いただきありがとうございます。ありがとう

答え1

現在の例に示すように、GNUを使用すると次のようになりますsed

% sed -nr 's/^#.*\s([^\s]+)$/\1/p' file.txt 
8.8.8.8
172.32.255.255
206.32.14.25

またはgrepPCREを使用してください。

% grep -Po '^#.*\s\K[^\s]+$' file.txt
8.8.8.8
172.32.255.255
206.32.14.25

答え2

パブリックIPが常に「Hello I am public IP」テキストと同じ行にある場合は、次のものを使用できますawk

awk '/Hello I am public IP/ {print $6}'

行の先頭のスペースは無視され、$6この行ではスペースで区切られた6番目のフィールドも無視されます。

関連情報