Oto fragment mojego skryptu powłoki -
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
Ale pokazuje mi następujące wyjście -
<version>1.1.7-release</version> <!-- ABC version -->
abc/xyz/pom.xml: Version not Found
Ale zgodnie z moim rozumieniem regex
powinien pasować do wyjścia grep
(powtórzyłem to do terminala, aby uzyskać lepszą przejrzystość). Czy ktoś może powiedzieć, co robię źle?
grep
? echo $(grep ...)
zmienią wynik na wiele sposobów (w rzeczywistości, echo $(somecommand)
prawie zawsze jest zły pomysł). Próbować grep ... | LC_ALL=C cat -vet
- cat
Polecenie przekształci wiele normalnie niewidocznych znaków w widoczne formy i doda „$” na końcu każdej linii, aby zobaczyć, gdzie się znajdują.
export -f custom_function
użyć funkcji custom_function w xargs
i oczywiście powyższy fragment był częścią funkcji niestandardowej. dzięki za poświęcenie czasu