我想使用grep
命令或只知道regex
以获取“>”之间的以下字符串和“<”字符。
string:
<f id=mos-title>demo-break-1</f>
我想返回
demo-break-1
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
通常最好使用XML解析器,但你可以试试这个awk:
awk '$1==s{print $2}' s="f id=mos-title" RS=\< FS=\> file