ファイルで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 " "
。