我想要使用grep
命令或只是知道regex
以获得“>”和“<”字符之间的以下字符串。使用正则表达式来检索字符之间的字符串
字符串:
<f id=mos-title>demo-break-1</f>
我想回
demo-break-1
我想要使用grep
命令或只是知道regex
以获得“>”和“<”字符之间的以下字符串。使用正则表达式来检索字符之间的字符串
字符串:
<f id=mos-title>demo-break-1</f>
我想回
demo-break-1
假设文件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
如果你有一个正确的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
通常最好使用XML解析器,但你可以试试这个AWK:
awk '$1==s{print $2}' s="f id=mos-title" RS=\< FS=\> file
[这是您需要的正则表达式。](http://en.wikipedia.org/wiki/XPath) – 2013-03-14 22:10:17
另一种方法:http://stackoverflow.com/questions/1732348/regex-match-open-tags-除了-XHTML-自足标签 – 2013-03-14 22:13:45