1

我正在尝试从我拥有的文件中解析项目。我无法弄清楚如何使用 grep 执行此操作,这是语法

<FQDN>Compname.dom.domain.com</FQDN>

<FQDN>Compname1.dom.domain.com</FQDN>

<FQDN>Compname2.dom.domain.com</FQDN>

我只想吐出 > 和 < 之间的位有人可以帮忙吗?谢谢

4

4 回答 4

1

Grep 不是你要找的。使用正则表达式尝试 sed:http ://unixhelp.ed.ac.uk/CGI/man-cgi?sed

于 2012-10-03T20:44:05.250 回答
1

你可以随心所欲地做grep

grep -oP '<FQDN>\K[^<]+' FILE

输出

Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com
于 2012-10-03T20:47:53.520 回答
1

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
于 2012-10-03T20:48:26.373 回答
1

正如其他人所说,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 等。

于 2012-10-03T20:49:22.380 回答