- wykonuję komendę
mvn install
która trwa 5 minut, caly czas printując output - chce zrobic
mnv clean install | mojprogram
-
mojprogram
umialbym przefiltrowac wszystkie te linie ze standard output poprzed wyrazenie regularne - mialby wykonywac jedna akcje jak linijka pasuje do wyrazenia, i inną kiedy nie pasuje
probowałem zrobić:
progress() {
while IFS= read -r line; do
if [[ $line =~ $pattern ]];
done
}
ale niestety =~
nie rozpoznaje PCRE, a tego "extended regular exprs" nie umiem. Chciałem nawet w nim napisac swoje wyrazenie ale na internecie nie ma nigdzie sensownego debugera do tego (tak jak jest np regex101 do pcre) - chyba że ktoś mi pomoże przerobić moj wzorzec z PCRE na extended shell, wtedy sprawa zalationa.
Znalazłem grep -P
w którym można ładnie to zrobić, ale flaga -P
nie jest wspierana na macu :/ grep -E
jest, ale to ma ten sam problem co =~
. Chciałem też przepipe'ować do innego programu który rozumie wyrażenia regularne, np:
pcre() {
python3 -c 'import sys, re; s = sys.stdin.read(); s=re.sub("Hello", "Good morning", s); print(s);'
}
while IFS= read -r line; do
echo $line | pcre
done
ale tutaj jest taki problem że boje się że znaki specjalne wzorca (/
, .
, -
zostaną najpierw zinterpretowane przez ten jezyk, i będę musiał je jakoś zaencodować, a nie umiem tego).
Próbowałem też z perl
i z awk
ale one nie zwracają true
/false
albo 1
/0
, tak jakbym chciał (żeby wsadzić do if [[
) tylko zwracają albo całą linijkę lub pusty string jak się nie udało znaleźć wystąpenia.
Chciałbym po prostu funkcję którą można wywołać
if [[ 'jakis tekst' | match '/moj (wzorzec)/' ]] ; then
echo "znalazlem wystapienie $wynik razem z capturing group $1"
else
echo 'nie ma wystapienia'
fi
pomoże ktoś?