简单Grep问题

简单Grep问题,grep,Grep,我正在尝试从我拥有的文件中解析项目。我想不出怎么和grep一起做这件事 下面是语法 <FQDN>Compname.dom.domain.com</FQDN> <FQDN>Compname1.dom.domain.com</FQDN> <FQDN>Compname2.dom.domain.com</FQDN> 我只想说出>和< 有人能帮忙吗? 谢谢你,格雷普不是你要找的。 使用正则表达式尝试sed:Grep不是您想要的。

我正在尝试从我拥有的文件中解析项目。我想不出怎么和grep一起做这件事 下面是语法

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

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

<FQDN>Compname2.dom.domain.com</FQDN>
我只想说出>和< 有人能帮忙吗?
谢谢你,格雷普不是你要找的。
使用正则表达式尝试sed:

Grep不是您想要的。
使用正则表达式尝试sed:

您可以使用grep随心所欲:


使用grep,您可以随心所欲:


grep可以做一些文本提取。但是,不确定这是否是您想要的:

grep -Po "(?<=>)[^<]*"
试验


grep可以做一些文本提取。但是,不确定这是否是您想要的:

grep -Po "(?<=>)[^<]*"
试验


正如其他人所说,grep不是实现这一点的理想工具。然而:

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

p选项将在大多数Linux环境中工作,但在*BSD、OSX或Solaris等环境中不起作用。

正如其他人所说,grep不是实现这一点的理想工具。然而:

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

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

您可以在Linux上使用sed。您可以在linux上使用sed。这是怎么回事?我知道它是怎么做的,我只是在正则表达式中从未见过\K这样做!正如维基百科所说:由于版本7.2,\K可以在模式中用于重置当前整个匹配的开始。这提供了一种灵活的替代方法来查找断言后面的内容,因为声明中被丢弃的部分与\K前面的部分不需要固定长度。啊,我不会想到在维基百科上查找grep的文档谢谢,这可能会派上用场。这是怎么回事?我知道它是怎么做的,我只是在正则表达式中从未见过\K这样做!正如维基百科所说:由于版本7.2,\K可以在模式中用于重置当前整个匹配的开始。这提供了一种灵活的替代方法来查找断言后面的内容,因为声明中被丢弃的部分与\K前面的部分不需要固定长度。啊,我不会想到在维基百科上查找grep的文档谢谢,这可能会派上用场。@n_hov-我怀疑这只在Linux中工作得很好,因为afaik是grep支持PCRE的唯一地方。如果您只在Linux中这样做,那么这是一个很好的答案。如果您可能会使用FreeBSD、NetBSD、OSX、Solaris、HP/UX等,您应该寻找其他解决方案来保持选项的开放性。@n_hov-我怀疑这只在Linux中有效,因为afaik是grep支持PCRE的唯一地方。如果您只在Linux中这样做,那么这是一个很好的答案。如果您可能会使用FreeBSD、NetBSD、OSX、Solaris、HP/UX等,那么您应该寻找其他解决方案来保持选项的开放性。
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | egrep -io '[a-z]+\.[^<]+'
Compname.dom.domain.com
$ echo '<FQDN>Compname.dom.domain.com</FQDN>' | grep -Po '(?<=>)[^<]+'
Compname.dom.domain.com