简单的Grep问题

时间:2012-10-03 20:40:41

标签: grep

我正在尝试从我拥有的文件中解析项目。我无法弄清楚如何用grep做到这一点 这是语法

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

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

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

我想吐出&gt;之间的位。并且&lt; 有人可以帮忙吗? 感谢

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以使用grep

按照您的意愿进行操作
grep -oP '<FQDN>\K[^<]+' FILE

<强>输出

Compname.dom.domain.com
Compname1.dom.domain.com
Compname2.dom.domain.com

答案 2 :(得分: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

答案 3 :(得分:1)

正如其他人所说,grep不是理想的工具。但是:

$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | egrep -io '[a-z]+\.[^<]+'
Compname.dom.domain.com

请记住,grep的目的是匹配事物。 -o选项会显示匹配的内容。为了使regex条件不是返回的表达式的一部分,你需要使用lookahead或lookbehind,大多数命令行grep不支持,因为它是PCRE的一部分而不是ERE。

$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | grep -Po '(?<=>)[^<]+'
Compname.dom.domain.com

-P选项适用于大多数Linux环境,但不适用于* BSD或OSX或Solaris等。