Piszę skrypt basha i muszę sprawdzić, czy nazwa pliku ma numer na końcu (po kropce), a jeśli tak, to go zdobyć, ale nie mogę zrozumieć, jak używać wyrażenia regularnego na zmiennej lub łańcuchu.
Byłem w stanie użyć echo
w terminalu do potoku łańcucha na grep, w ten sposób:
echo "filename.txt.123" | egrep -o "\.[0-9]+$" | egrep -o "[0-9]+"
Ale muszę przypisać wyjście tego do zmiennej. Próbowałem to zrobić:
revNumber= echo "filename.txt.123" | egrep -o "\.[0-9]+$" | egrep -o "[0-9]+"
Ale to nie działa. Spróbowałem też kilku innych rzeczy, ale nic nie było ważne.
W moim skrypcie bash chcę używać grep na zmiennej, a nie na łańcuchu, ale koncepcja tutaj jest taka sama.
Jak mogę użyć grep na łańcuchu lub zmiennej, a następnie zapisać wynik w innej zmiennej?
r=`echo abc`
echo $ rOdpowiedzi:
Aby przypisać wyjście polecenia do zmiennej, użyj
$()
:Jeśli zależy ci tylko na tym pasujący , możesz rozważyć
case
:źródło
$()
Formularz.``
jest w starym stylu;$()
jest czystszy.Dlaczego grep i echo I / O overkill, sugeruję użycie możliwości przetwarzania łańcuchów bash:
Wyrażenie regularne można zoptymalizować i nie jest idealne, ale oto podstawy:
Sprawdź inne grzmotnąć możliwości manipulacji ciągami w TLDP tutaj .
źródło
Poniżej znajduje się kolejna opcja, która używa porównania wyrażeń regularnych bash przed wyodrębnieniem wartości na końcu łańcucha.
źródło