第一次见面,所以要温柔。
我有以下文本文件,“test_file”:

 <Tag1>not </Tag1><Tag2>working</Tag2>

我想使用sed regex提取<Tag2>之间的文本,可能还有其他<Tag2>的出现,我也想提取这些。
到目前为止,我有一个基于sed的regex:
cat test_file | grep -i "Tag2"| sed 's/<[^>]*[>]//g'

它给出了输出:
 not working

有人知道怎么让它工作吗?

最佳答案

正如另一张海报所说,sed可能不是这项工作的最佳工具。您可能需要使用一些为XML解析而构建的东西,甚至是一种简单的脚本语言,比如perl。
你尝试的问题是,你没有正确地分析字符串。
cat test_file很好-它将文件内容打印到stdout。
grep -i "Tag2"没问题-它只打印带有“Tag2”的行。这可能不是你想要的。请记住,它将打印整行,而不仅仅是部分,因此您以后仍需搜索该部分。
sed 's/&lt;[^&gt;]*[&gt;]//g'不是您想要的-它只是删除标记,包括和。
你可以试试这样的方法:

cat tmp.tmp | grep -i tag2 | sed 's/.*<Tag2>\(.*\)<\/Tag2>.*/\1/'

这将产生
working

但它只对一个标签对有效。

10-04 10:36