我有一个包含以下字符串的文本文件,每个字符串都在单独的行中
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\([^)]*\)
表示您需要,然后是除then之外的(
任何符号。的关键说只需要打印与正则表达式匹配的输入文本的那部分。)
)
-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