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\([^)]*\)表示您需要,然后是除then之外的(任何符号。的关键说只需要打印与正则表达式匹配的输入文本的那部分。))-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,不能egrep-sed可以编辑文本,而egrep只能选择文本行并原样打印。像这样的东西:

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