Я пытаюсь извлечь группы совпадений из строки - я использовал Rubular , чтобы создать шаблон:
\[(.*?)\]
Который в ruby, кажется, извлекает ожидаемые группы для следующей строки:
1547156981784: подача [Code128] с [this_is_a_test] размером [12ms] [385B] с использованием [http://barcodeapi.org/index.html] для [1.2.3.4] через [5.6.7.8]
1: Code128
2: this_is_a_test
3: 12ms
4: 385B
5: http://barcodeapi.org/index.html
6: 1.2.3.4
7: 5.6.7.8
Однако эта проблема заключается в том, что я пытаюсь реализовать это регулярное выражение в скрипте Bash для анализа файла журнала:
reg='\[(.*?)\]'
while read line; do
if [[ $line =~ $reg ]]; then
echo ${BASH_REMATCH[1]};
fi
done < $log
Но результаты не такие, как у рубина / рубулара; в Bash группа совпадений # 1 содержит всю строку, за исключением самых первых и самых последних скобок; для той же строки журнала bash возвращает только одно совпадение:
1: Code128 ] with [ this_is_a_test ] in [ 12ms ] size [ 385B ] using [ http://barcodeapi.org/index.html ] for [ 1.2.3.4 ] via [ 5.6.7.8
Вопрос существо,
Почему два двигателя дают разные результаты? Как правильно разделить группы с помощью Bash?