我想解析出我有文件的项目。我无法弄清楚如何使用grep做到这一点 这里是语法简单Grep问题
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
我要吐了出来正好之间的位>和< 任何人都可以帮助? 谢谢
我想解析出我有文件的项目。我无法弄清楚如何使用grep做到这一点 这里是语法简单Grep问题
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
我要吐了出来正好之间的位>和< 任何人都可以帮助? 谢谢
的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
谢谢。完美的作品! –
@n_hov - 我怀疑这只适用于Linux,因为afaik是grep支持PCRE的唯一地方。如果你只会在Linux中这样做,那么这是一个很好的答案。如果你可能使用FreeBSD,NetBSD,OSX,Solaris,HP/UX等,你应该看看其他解决方案来保持你的选择。 – ghoti
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的是不是这个的理想工具。然而:
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | egrep -io '[a-z]+\.[^<]+'
Compname.dom.domain.com
请记住,grep的目的是匹配的东西。 -o
选项会显示它匹配的内容。为了使正则表达式的条件不是返回的表达式的一部分,你需要使用lookahead或lookbehind,这是大多数命令行grep所不支持的,因为它是PCRE的一部分,而不是ERE。
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | grep -Po '(?<=>)[^<]+'
Compname.dom.domain.com
的-P
选项将在大多数Linux环境中工作,但不是在* BSD或OSX或Solaris等
,你可以用sed在Linux上。 http://unixhelp.ed.ac.uk/CGI/man-cgi?sed –