Pencocokan Regex dalam skrip shell

0

Ini cuplikan dari skrip shell saya -

regex="<version>([0-9]*)\.([0-9]*)\.([0-9]*)([^<]*)<\/version>.*"

#some unrelated lines of code

    echo $(grep -m 1 "<version>" $1)
    if [[ $(grep -m 1 "<version>" $1) =~ $regex ]]
    then
        main_version = "${BASH_REMATCH[1]}"
        feature_version = "${BASH_REMATCH[2]}"
        patch_version = "${BASH_REMATCH[3]}"
        tag = "${BASH_REMATCH[4]}"
    else
        echo "$1: Version not Found" >&2
    fi

Tapi itu menunjukkan kepada saya output berikut -

<version>1.1.7-release</version> <!-- ABC version -->
abc/xyz/pom.xml: Version not Found

Namun menurut pemahaman saya, regex harus sesuai dengan output dari grep (Saya menggema ke terminal untuk kejelasan yang lebih baik). Jadi bisakah seseorang mengatakan kesalahan saya?

monster
sumber
Saya mencoba ini pada file yang berisi barang-barang Anda, dan itu cocok ... apa rilis pesta Anda? (bash --versi)
tonioc
Juga apa persis adalah keluaran dari grep? echo $(grep ...) akan memotong-motong output dalam beberapa cara (pada kenyataannya, echo $(somecommand) hampir selalu merupakan ide yang buruk). Mencoba grep ... | LC_ALL=C cat -vet - itu cat perintah akan mengonversi berbagai karakter yang biasanya tidak terlihat ke bentuk yang terlihat, dan menambahkan "$" ke akhir setiap baris sehingga Anda dapat melihat di mana mereka berada.
Gordon Davisson
Saya menemukan kesalahan, itu disebabkan oleh export -f custom_function untuk menggunakan fungsi custom_ dalam xargs dan tentu saja cuplikan di atas adalah bagian dari fungsi khusus. terima kasih telah memberikan waktu anda
monster