0

次の文字列をそれぞれ別の行に含むテキスト ファイルがあります。

Host: 22.44.55.33 (x.y.z)   Status: Up

行から抽出する必要があるのは、括弧内の文字列x.y.zです。

Linuxでgrepを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

4
echo "Host: 22.44.55.33 (x.y.z)   Status: Up" | egrep -o "\([^)]*\)"
(x.y.z)

reは、次にとを除くすべての記号\([^)]*\)が必要であることを意味します。のキーは、正規表現に一致する入力テキストの部分のみを出力する必要があることを示しています。())-ogrepgrep

内部に "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

于 2012-07-26T13:04:33.833 に答える
2

必要でsedはなく、テキストを編集できますが、テキストの行を選択して変更せずに印刷することしかできません。このようなもの:egrepsedegrep

sed -e 's/^Host:.*(\([^)]*\)).*$/\1/' < inputfile.txt
于 2012-07-26T13:03:10.153 に答える