我有一个包含以下字符串的文本文件,每个字符串都在一个单独的行中
Host: 22.44.55.33 (x.y.z) Status: Up
我需要从行中提取的是括号x.y.z
之间的字符串。
如何在Linux中使用grep执行此操作?
答案 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