次の文字列をそれぞれ別の行に含むテキスト ファイルがあります。
Host: 22.44.55.33 (x.y.z) Status: Up
行から抽出する必要があるのは、括弧内の文字列x.y.z
です。
Linuxでgrepを使用してこれを行うにはどうすればよいですか?
echo "Host: 22.44.55.33 (x.y.z) Status: Up" | egrep -o "\([^)]*\)"
(x.y.z)
reは、次にとを除くすべての記号\([^)]*\)
が必要であることを意味します。のキーは、正規表現に一致する入力テキストの部分のみを出力する必要があることを示しています。(
)
)
-o
grep
grep
内部に "Host: Up" が含まれる行のみが必要な場合は、アサーションを使用できます。
$ cat 1.txt
(1.2.3.4) Host: Up
(5.6.7.8) Host: Down
(9.1.2.3) Host: Up
$ grep -oP '\([^)]*\)(?=.*Host: Up)' 1.txt
(1.2.3.4)
(9.1.2.3)
ここでの要点は、あなたが列に並び(?=.*Host: Up)
たいと言っているということですHost: Up
。
必要でsed
はなく、テキストを編集できますが、テキストの行を選択して変更せずに印刷することしかできません。このようなもの:egrep
sed
egrep
sed -e 's/^Host:.*(\([^)]*\)).*$/\1/' < inputfile.txt