Почему я не могу использовать ^ \ s с grep? - PullRequest
0 голосов
/ 20 декабря 2018

В моем случае работают оба приведенных ниже регулярных выражения.

grep \s
grep ^[[:space:]]

Однако все приведенные ниже не дают результатов.Я пробовал как в git bash, так и в putty.

grep ^\s
grep ^\s*
grep -E ^\s
grep -P ^\s
grep ^[\s]
grep ^(\s)

Последний даже выдает синтаксическую ошибку.

Если я попытаюсь ^\s в debuggex, это сработает.

Regular expression visualization

Демо Debuggex

Как найти строки, начинающиеся с пробельных символов с grep?У меня есть для использования [[:space:]]?

1 Ответ

0 голосов
/ 20 декабря 2018

grep \s работает для вас, потому что ваш ввод содержит s.Здесь вы экранируете s и оно совпадает с s, поскольку оно не анализируется как пробел, соответствующий экранированию регулярного выражения.Если вы используете grep ^\\s, вам будет соответствовать строка, начинающаяся с пробела, так как \\ будет проанализирован как литерал \ char.

Лучшая идея - включить синтаксис POSIX ERE с -Eи процитируйте образец:

grep -E '^\s' <<< "$s"

См. онлайн демо :

s=' word'
grep ^\\s <<< "$s"
# =>  word
grep -E '^\s' <<< "$s"
# =>  word
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...