我正在尝试从我拥有的文件中解析项目。我无法弄清楚如何用grep做到这一点 这是语法
<FQDN>Compname.dom.domain.com</FQDN>
<FQDN>Compname1.dom.domain.com</FQDN>
<FQDN>Compname2.dom.domain.com</FQDN>
我想吐出&gt;之间的位。并且&lt; 有人可以帮忙吗? 感谢
答案 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等。