第一次见面,所以要温柔。
我有以下文本文件,“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/<[^>]*[>]//g'
不是您想要的-它只是删除标记,包括和。
你可以试试这样的方法:
cat tmp.tmp | grep -i tag2 | sed 's/.*<Tag2>\(.*\)<\/Tag2>.*/\1/'
这将产生
working
但它只对一个标签对有效。