使用指定字符串在两行之间使用Bash,grep

时间:2016-11-30 13:12:00

标签: regex 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>'

但它也返回<un:Test1 id="U222">以下的所有字符串。我知道使用xmlparser解析这类文件会更好,但是不允许在服务器上安装额外的lib,所以我只能使用grep,awk,sed等。请帮帮我。

1 个答案:

答案 0 :(得分:2)

你是说这个吗?

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

使用xmllint更新

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

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

注意:如果您对同一个本地名称具有不同的命名空间(&#34; Test1&#34;),则需要添加namespace-uri()