Интересное совпадение grep в bash - PullRequest
1 голос
/ 05 февраля 2012

Можете ли вы объяснить, почему

Этот дает $?= 1

echo "uus" | grep -w -o [0123456789]\*

а этот дает $?= 0

echo "-uus" | grep -w -o [0123456789]\*

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

Ваше регулярное выражение может соответствовать пустой строке.Флаг -w означает, что любому совпадению должен предшествовать символ начала строки или неслова, а затем символ конца строки или неслова.

В случаеuus, за началом строки следует символ слова, поэтому grep не может соответствовать пустой строке в качестве слова.Концу строки предшествует символ слова, поэтому grep не может соответствовать пустой строке в качестве слова.

В случае -uus, за началом строки следует -, который не является символом слова, поэтому grep может соответствовать пустой строке как слову между началом строки и символом -.

0 голосов
/ 05 февраля 2012

grep соответствует слову нулевой длины между '-' и 'u'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...