2つのgrepを1つのコマンドに結合

2つのgrepを1つのコマンドに結合

次のXMLがあります。

    <artifactId>myproject</artifactId>
    <version>1.14.0-SNAPSHOT</version>

バージョンを抽出したいです1.14.0-SNAPSHOT。つまり、2つのgrepとパイプを使用してこれを行う方法を知っています。

$ grep -A1 "<artifactId>myproject</artifactId>" pom.xml | grep -Eo "\d+.\d+.\d+-SNAPSHOT"

2つを1つにまとめるにはどうすればよいですか?これにawkまたはsedを使用する方が良いでしょうか?

ベストアンサー1

<version>次の行以降に確実であればmyproject

sed -n '
    \|<artifactId>myproject</artifactId>|{
        n                                           #get next line
        s|[[:blank:]]*</\?version>[[:blank:]]*||gp  #remove tags and print
    }
' pom.xml

またはあなたが持っているなら正規表現

grep -zoP '<artifactId>myproject</artifactId>\s*\n\s*<version>\K[^<]+' pom.xml

おすすめ記事