grep は ipv4 を行ではなく単語として検索します。

grep は ipv4 を行ではなく単語として検索します。

ファイルでipv4を探す必要があります。問題は、同じ行に異なる単語IPがある場合、スクリプトがそれを印刷しないことです。これは私のスクリプトです。

#!/bin/bash


if [ -e ip.txt ]
then
    grep -E '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' ip.txt
else
    echo "file not found"
fi

今、このようなものがある場合、スクリプトはIPを印刷しません。

198.54.34.6 text

ベストアンサー1

コマンドからおよびを削除^し、grepコマンドのフラグを使用します。つまり:$-o

grep -Eo '(^| )(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])($|[[:space:]])'

例:

echo 'some text 198.54.34.6 and test' | grep -Eo '(^| )(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])($|[[:space:]])'

出力は次のとおりです

 198.54.34.6

空白が発生し、trたとえば空白を削除してみてくださいcommand1 | tr -d " "

おすすめ記事