example_file.txt:
a43
<un:Test1 id="U111">
abc1
cvb1
bnm1
</un:Test1>
<un:Test1 id="U222">
abc2
cvb2
bnm2
</un:Test1>
我只需要<un:Test1 id="U111">
和第一</un:Test1>
之间的所有行。这些行的数量因输入文件的不同而不同。我试过了
grep -E -A100000 '<un:Test1 id=\"U111\">'
example_file.txt | grep -B100000 '</un:Test1>'
但它也返回<un:Test1 id="U222">
以下的所有字符串。我知道使用xmlparser解析这类文件会更好,但是不允许在服务器上安装额外的lib,所以我只能使用grep,awk,sed等。请帮帮我。
答案 0 :(得分:2)
你是说这个吗?
sed -n '/<un:Test1 id="U111">/,/<\/un:Test1>/p' file
如果您的输入是xml,您可以尝试:
xmllint --xpath "//*[local-name()='Test1'][@id='U111']" file.xml
注意:如果您对同一个本地名称具有不同的命名空间(&#34; Test1&#34;),则需要添加namespace-uri()