grepコマンドは特定の単語のみを抽出します

grepコマンドは特定の単語のみを抽出します

IPアドレスを表示するランダムな行を含む大規模なレポートがあります。すべてのIPアドレスは192.168.1で始まります。 IPアドレスを抽出して次のレポートを受けたいと思います。

192. 何でも。

192.xx.xx.xx

192.xx.xx.xx

他にはありません。私はそれを試してみて、cat filename | grep -w 192 全体の行を取得するようです。私は完全なIPアドレスが欲しい。私と共有できる情報に感謝します。

答え1

egrep -o私はこれを使って、またはgrep -E -o

grepの-Eフラグは正規表現(egrepがデフォルトで実行するアクション)を有効にし、-oフラグは印刷します。ただ一致する文字列です。

grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /path/to/log
192.168.1.11

答え2

grep -o '192.168.[0-9.]*' datfile | sort -u

以前のバージョンに移植可能ではないかもしれませんが、grepGNU-oと* BSDの両方で対応しているようですgrep。したがって...(IPアドレスと完全に一致しませんが、正規表現を使用して正しい数値範囲を適用するのはかなり面倒です。)

答え3

sed -n 's/.*\(192.168.[^ ]*\).*/\1/p' filename

これで問題が解決します。 \>単語の終わりを示します。

答え4

すべてのIPアドレスは192.168.次の操作で始まるため、次のことができます。

grep -o '192\.168\.[^ ]\+' file.txt

たとえば、

$ grep -o '192\.168\.[^ ]\+' bar.txt 
192.168.5.4
192.168.1.2

関連情報