我正在尝试从我拥有的文件中解析项目。我无法弄清楚如何使用 grep 执行此操作,这是语法
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
我只想吐出 > 和 < 之间的位有人可以帮忙吗?谢谢
我正在尝试从我拥有的文件中解析项目。我无法弄清楚如何使用 grep 执行此操作,这是语法
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
我只想吐出 > 和 < 之间的位有人可以帮忙吗?谢谢
Grep 不是你要找的。使用正则表达式尝试 sed:http ://unixhelp.ed.ac.uk/CGI/man-cgi?sed
你可以随心所欲地做grep
:
grep -oP '<FQDN>\K[^<]+' FILE
输出:
Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
grep 可以做一些文本提取。但是不确定这是否是您想要的:
grep -Po "(?<=>)[^<]*"
测试
kent$ echo "<FQDN>Compname.dom.domain.com</FQDN>
dquote>
dquote> <FQDN>Compname1.dom.domain.com</FQDN>
dquote>
dquote> <FQDN>Compname2.dom.domain.com</FQDN>"|grep -Po "(?<=>)[^<]*"
Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
正如其他人所说,grep 不是理想的工具。然而:
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | egrep -io '[a-z]+\.[^<]+'
Compname.dom.domain.com
请记住,grep 的目的是匹配事物。该-o
选项向您显示它匹配的内容。为了使正则表达式条件不属于返回的表达式的一部分,您需要使用前瞻或后瞻,大多数命令行 grep 不支持,因为它是 PCRE 而不是 ERE 的一部分。
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | grep -Po '(?<=>)[^<]+'
Compname.dom.domain.com
该-P
选项适用于大多数 Linux 环境,但不适用于 *BSD 或 OSX 或 Solaris 等。