Kabuk komut dosyasında Regex eşleştirme


0

İşte benim kabuk betiğimin bir pasajı -

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

Ama bana şu çıktıları gösteriyor -

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

Fakat benim anlayışıma göre regex, grep(daha iyi netlik için terminale ekledim) çıktısı ile eşleşmelidir . Birisi neyi yanlış yaptığımı söyleyebilir mi?


Bunu eşyalarını içeren bir dosyada denedim, ve eşleşiyor ... baskı yayının ne? (bash
version

Ayrıca, çıktı tam olarak grepnedir? echo $(grep ...)Çıktıyı çeşitli şekillerde tutacağım (aslında, echo $(somecommand)neredeyse her zaman kötü bir fikir) Deneyin grep ... | LC_ALL=C cat -vet- catkomut, normal olarak görünmeyen çeşitli karakterleri görünür formlara dönüştürür ve her satırın sonuna "$" ekler, böylece nerede olduklarını görebilirsiniz.
Gordon Davisson

Hatayı buldum, bunun sebebi export -f custom_function, custom_function işlevinin kullanılması xargsve aboce snippet'inin custom_funcion'un bir parçası olmasıydı. zaman ayırdığınız için teşekkürler
canavar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.