Próbuję odczytać linię z pliku, zapisać ją w zmiennej $ line i wyodrębnić wszystkie instancje (tzn. Nawiasy kątowe tylko dużymi literami). Próbuję:
while read line
do
#some other commands
FOUND=`expr $line : \<[A-Z]*\>`
echo FOUND is:$FOUND
#more commands
Po uruchomieniu skryptu zasilam go:
<hello><HELLO>
wydajność:
FOUND is:0
Wypróbowałem również wariacje na temat cytatów wokół bitu regex. to znaczy
"\<[A-Z]*\>"
,
'\<[A-Z]*\>'
i
\(<[A-Z]*>\)
gdzie ostatni z tych zwraca null.
Sprawdziłem stronę podręcznika, powinna ona zwracać 0, jeśli pasuje zero znaków lub jeśli mecz się nie powiedzie. Czuję, że to coś małego, co przeoczyłem, ale po godzinie poszukiwań wciąż nie mogę tego zrozumieć.
Każda pomoc zatwierdzona
=~
operator? Nie mogę go znaleźć na liście operatorów porównania bash. Czy jest to forma „zawiera”?[[...]]
poleceniemif [[ "$line" =~ pattern1 ]] || [[ "$line" =~ pattern2 ]] || [[ "$line" =~ pattern3 ]] ...
lub możesz sprytnie połączyć wszystkie wzory w jedno wyrażenie regularne, ale to może szybko stać się nieczytelne