我有以下行:
randomtext<News:Image>111</News:Image>morerandomtext<News:Image>abc123</News:Image>sometext<News:Image>321abc</News:Image>
<News:Image>
我无法让 sed 提取和标签之间的值</News:Image>
。
我尝试过sed -rn 's/<News:Image>/<\/News:Image>/p' feed2.xml
但无法让它工作。
我需要 sed 输出:
111
abc123
321abc
答案1
您的sed
字符串变成<News:Image>
了</News:Image>
,这不是您想要的。
如果我们假设没有任何文本包含,<
那么以下内容是一个简单、直接的替换:
sed -n 's/[^<]*<News:Image>\([^<]*\)<\/News:Image>[^<]*/\1\n/gp' feed2.xml
这将查找所需标签前后的任何文本,然后用开始和结束标签之间的内容替换找到的字符串,并附加一个换行符。
在更一般的情况下,例如同一行上可能有不同的标签,最容易通过两个sed
调用来完成:
sed -e 's/<News:Image>/\n&/g' -e 's/<\/News:Image>/&\n/g' feed2.xml | \
sed -n 's/[^<]*<News:Image>\(.*\)<\/News:Image>/\1/gp'
第一遍通过在前后添加换行符来将标签隔离在不同的行上,然后第二遍提取开始和结束标签之间的内容。