0

我想使用grep命令或只知道在regex“>”和“<”字符之间获取以下字符串。

细绳 :

<f id=mos-title>demo-break-1</f>

我想回来

demo-break-1
4

3 回答 3

0

假设文件foo包含:

<f id=mos-title>demo-break-1</f>
<f id=mos-title>demo-break-2</f>
<f id=mos-title>demo-break-3</f>
<a>foo testing</a>

你可以这样做:

perl -ne 'print "$1\n" if /<.+id=mos-title>(.+?)<\/f>/' foo

请记住,如果这些匹配只发生在一行上,这将是严格的。此外,您必须考虑格式中的任何偏差,因为这不是有效的 HTML 解析器。

就严格而言,这是一种更轻松的方法,但仍不是 100% 兼容 HTML。

perl -ne 'print "$1\n" if /<.+id=mos-title\b.*?>\s*(.+?)\s*<\/f>/' foo

输出如下:

demo-break-1
demo-break-2
demo-break-3
于 2013-03-15T00:08:22.800 回答
0

通常最好使用 XML 解析器,但你可以试试这个 awk:

awk '$1==s{print $2}' s="f id=mos-title" RS=\< FS=\> file
于 2013-03-16T11:56:35.817 回答
0

如果您有这样的正确 xml 文档:

<root>
  <f id="mos-title">demo-break-1</f>
</root>

您可以使用适当的解析器:

xmllint --xpath "/root/f[@id='mos-title']" input.xml | \
      sed 's/[^>]*>\([^<]*\)<[^>]*>/\1\n/g'

使用您的输入,您可以确定输入格式是一致的(即生成的),您可以使用 sed:

sed 's/[^>]*>\([^<]*\)<[^>]*>/\1/g' input
于 2013-03-15T00:36:39.900 回答