我怎样才能egrep这个表达

时间:2012-07-26 13:00:24

标签: regex linux grep

我有一个包含以下字符串的文本文件,每个字符串都在一个单独的行中

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

我需要从行中提取的是括号x.y.z之间的字符串。

如何在Linux中使用grep执行此操作?

2 个答案:

答案 0 :(得分:4)

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

重新\([^)]*\)表示您需要(,然后是)以及)以外的所有符号。 -o的{​​{1}}密钥表示grep只需要打印与正则表达式匹配的输入文本部分。

如果你只想要那些内部有“Host:Up”的行,你可以使用断言:

grep

这里的要点是$ 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)在该行中。

答案 1 :(得分:2)

您需要sed,而非egrep - sed可以修改文字,而egrep只能选择文字行并打印不变。像这样:

sed -e 's/^Host:.*(\([^)]*\)).*$/\1/' < inputfile.txt