Что это соответствует: Bash Regex - PullRequest
1 голос
/ 01 мая 2011
if [[ "$len" -lt "$MINLEN" && "$line" =~ \[*\.\] ]]

Это из Расширенного руководства по написанию сценариев bash "Пример 10-1. Вставка пустой строки между абзацами в текстовом файле"

Насколько я понимаю, это соответствует "любой строке или символу точки". Правильно?

Ответы [ 3 ]

4 голосов
/ 01 мая 2011

Соответствует нулю или более символов открытой скобки (\[*), за которыми следует точка и квадратная скобка (\.\]).Обратите внимание, что требуется только, чтобы совпадение существовало где-то в «$ line», а не совпадение всей строки.Вот демо:

$ showmatch() { [[ "$1" =~ \[*\.\] ]] && echo "matched: '${BASH_REMATCH[0]}'" || echo "no match"; }
$ showmatch "abc[.]def"
matched: '[.]'
$ showmatch "abc.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.]def"
matched: '[[[[[[[.]'
$ showmatch "abc[[[[[[[xyz.]def"
matched: '.]'
$ showmatch "abc[[[[[[[.xyz]def"
no match

... и я почти уверен, что это не то, что он должен делать в этом примере скрипта.

2 голосов
/ 01 мая 2011

Это означает любую строку, оканчивающуюся точкой внутри браслета, например:

[.]
[abc.]
0 голосов
/ 01 мая 2011

Обновление: +1 Гордону Дэвиссону, который довольно хорошо подвел итог ... так что я отредактировал свой оригинальный пост

Вкратце: вы можете проверить результат совпадения с регулярным выражением bash следующим образом:

[[ "[*.]" =~ \[*\.\] ]] ; echo ${BASH_REMATCH[0]} 
...