bash,在两条线之间进行指定字符串之间的grep



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>'

,但它也返回所有字符串bellow <un:Test1 id="U222">。我知道最好使用XMLPARSER来解析此类文件,但是不允许在服务器上安装其他LIB,因此我只能使用GREP,AWK,SED等。请帮我。

您的意思是吗?

sed -n '/<un:Test1 id="U111">/,/</un:Test1>/p' file

用XMLLINT更新

如果您的输入是XML,则可以尝试:

xmllint --xpath "//*[local-name()='Test1'][@id='U111']" file.xml

注意:如果您对同一localname(" test1")有不同的名称空间,则需要添加namespace-uri()

最新更新