Как пробелы работают в регулярном выражении с grep в оболочке bash? - PullRequest
1 голос
/ 12 апреля 2011

Как я мог бы прочитать регулярное выражение ниже:

  1. символ пробела
  2. символ косой черты
  3. символ 'n'
  4. ноль или более пробелов
  5. конец строки

Но этот тест не пройден:

$ echo "Some Text \n " | grep " \\n *$"

Если я удаляю пробел в регулярном выражении, неошибка

$ echo "Some Text \n " | grep "\\n *$"
Some Text \n

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Попробуйте это:

echo "Some Text \n " | grep ' \\n *$'

Обратите внимание на одинарные кавычки.Этот вопрос о сбое содержит больше информации об одинарных или двойных кавычках.В одинарных кавычках строка трактуется буквально.

Вот объяснение.Когда вы делаете:

echo "Test\n", вы получаете Test\n в качестве вывода, потому что echo не переводит escape-последовательности (если вы не отправите ему флаг -e).

echo "Test\n" | grep '\n', соответствует только n.Это потому, что \n - это "экранированный n" (кажется, что он не переводится в реальный перевод строки).Если вы хотите, чтобы он совпадал с \ и n, вам нужно сделать echo "Test\n" | grep '\\n'.

0 голосов
/ 13 апреля 2011

При использовании регулярных выражений вы должны помнить о контексте, в котором вы их используете.Несколько символов обрабатываются специально механизмом регулярных выражений, а также - механизмом, который вы используете для его вызова.

В вашем случае вы используете bash.В зависимости от того, как вы цитируете вещи, вам может потребоваться дважды экранировать специальные символы.Один раз, чтобы bash не интерпретировал специальный символ, и еще раз, чтобы получить поведение регулярного выражения, которое вы желаете.

Чтобы решить подобные проблемы, сначала нужно спросить себя: «Как должно выглядеть выражение?»Затем вы должны также спросить: как мне подготовить это выражение, чтобы механизм регулярных выражений действительно получал этот шаблон? ». Это подразумевает понимание эффекта, который кавычка оказывает на выражение.и другие, менее простые механизмы цитирования).

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