Использование кавычек в GNU grep регулярные выражения

поместите эту строку в Вас .bashrc или .profile файл в ~ / Затем, это загружается каждый раз, когда Вы запускаете свою консольную сессию

4
01.03.2013, 02:24
2 ответа

Кавычки расширены оболочкой, они определяют что grep видит.

С grep -E '\<H', символы между одинарными кавычками передаются буквально, таким образом, grep видит regex \<H содержа привязку начала слова \<.

С grep -E \<H, символ обратной косой черты удаляет особое значение < в оболочке, и grep видит regex <H. Вы видели бы соответствия для строки как <Hello>.

С grep -E <H, < символ имел бы свое особое значение в оболочке как символ перенаправления, таким образом, grep получил бы содержание названного файла H на его стандартном входе.

С grep 'd$' или grep d\$, знак доллара заключается в кавычки так, он достигает grep: regex d$, соответствие a d в конце строки.

С grep d$ test, $ знак не сопровождается допустимым именем переменной или допустимой пунктуацией (${, $(). Когда это происходит, оболочка передает $ подпишитесь буквально, таким образом, grep снова видит regex d$. $ только расширен, когда это сопровождается допустимым именем переменной (даже если переменная является неопределенной — что имеет значение, то, что имя следует, как в $PATH или $fioejsfoeij или односимвольные переменные такой как $- или $$), или в конструкциях ${…}, $(…), $((…)) (также $[…] в ударе и zsh и большем количестве конструкций в zsh).

Полные правила для расширения оболочки слишком сложны для описания в сообщении или дюжине. На практике достаточно помнить обычные случаи:

  • \ (обратная косая черта) заключает следующий символ в кавычки, если это не новая строка, и обратная косая черта всегда разделяется;
  • '…' (одинарные кавычки) заключают каждый символ в кавычки кроме ' самостоятельно;
  • "…" (двойные кавычки) заключают каждый символ в кавычки кроме "$\`, и \ в двойных кавычках заставляет следующий символ интерпретироваться буквально и только разделяется, если следующий символ был специален.
7
27.01.2020, 20:51
  • 1
    Также отметьте это, например. "This and $that" разворачивает переменную оболочки that (да, это неявно в ответе, но это - ловушка для, не варьируются новички...) –  vonbrand 01.03.2013, 02:51

\< сначала оставлен оболочкой, и ее значение становится литералом < символ. Таким образом, регулярное выражение передало grep строка <H, который не имеет особого значения.

И если Вам нужны глубокие знания того конкретного отношения, необходимо консультироваться с ответом Gilles.

0
27.01.2020, 20:51
  • 1
    Также может иметь некоторую дополнительную забаву с \\\<H... –  vonbrand 01.03.2013, 02:52

Теги

Похожие вопросы