использование '?' в grep - PullRequest
0 голосов
/ 05 мая 2018

Итак, я играл с grep, и вот ситуация: -

Я получил два файла в моем корневом каталоге, «sample» и «simple», из того, что я прочитал, ? регулярное выражение соответствует появлению предыдущего символа, поэтому следующее должно дать мне «simple» в качестве вывода: -

ls | grep 'sia?mple'

но, похоже, не работает. Следующие работы хотя: -

ls | awk '/sia?mple/ {print}'

также версия ls ?, * и т. Д., Кажется, работает иначе, чем grep или awk

1 Ответ

0 голосов
/ 05 мая 2018

ls не поддерживает ?, * или любые метасимволы вообще.

Оболочка развернется ?, *, [ ], { } (и несколькими другими вещами) в командной строке (если оставить их без кавычек). Это происходит еще до запуска команды (вы можете проверить с помощью echo s?mple или echo s[ai]mple).

Существует много различных регулярных выражений. По сути, каждый инструмент и библиотека имеют свой собственный синтаксис регулярных выражений и причуды.

Что касается grep, ознакомьтесь с руководством .

В В частности :

В основных регулярных выражениях метасимволы ‘?’, ‘+’, ‘{’, ‘|’, ‘(’ И ‘) 'теряют свое особое значение; вместо этого используйте версии с обратной косой чертой ‘\?’, ‘\ +’, ‘\ {’, ‘\ |’, ‘\ (’ и ‘\)’.

(«Основные» регулярные выражения - это то, что вы получите, если вы запустите grep с параметрами по умолчанию.)

Таким образом:

grep 'sia\?mple'

будет соответствовать siample и simple.

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