Intereting Posts

Как избежать <или> в параметре в оболочке?

Я хотел бы использовать grep с выражением PCRE, содержащим символ < character. Баш думает, что я хочу перенаправить, но я не хочу. Как я могу избежать < ?

Я смог сделать это с обратной косой чертой:

 25 % grep \< xmospos.c #include <stdio.h> #include <stdlib.h> #include <getopt.h> #include <X11/Xlib.h> 

Процитированные менее, а цитируемые, обратные сбрасывания были меньше, чем оба ответа.

Два простых правила:

  • Обратная косая черта \C ускользает от следующего символа, независимо от того, что это такое, кроме новой строки.
  • 'text' одиночных кавычек позволяет избежать любого символа между ними, включая обратную косую черту, но не включает в себя одну цитату (так как она обозначает конец цитируемого текста).

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

 grep -P '<html>' myfile grep -P \<html\> myfile grep -P '(?<!<)html' myfile grep -P \(\?\<\!\<\) myfile 

Если вам нужно передать аргумент, содержащий одиночные кавычки, вы можете использовать '\'' чтобы «избежать» одной кавычки внутри одинарных кавычек. Технически, это то, что заканчивается первым литералом, а затем помещает буквальное слово в то же слово, а затем более буквальный текст по-прежнему одним и тем же словом.

 grep '^D'\''oh!' myfile 

Остальные правила цитирования (обобщены):

  • Вы должны процитировать следующие символы, по крайней мере, в некоторых случаях: whitespace и !"#$&'()*;<>?[\]^`{|}~ (Другими словами, следующие символы безопасны: буквы , цифры, %+,-./:=@_ и символы, отличные от ASCII).
  • Между двойными кавычками все символы используются буквально, кроме "$\` и (в оболочках с включенной историей) ! В строке будет отображаться обратная косая черта между двойными кавычками, если она не предшествует одному из нелиберальных символов.

Эти правила предназначены для bash и других оболочек в стиле Bourne (например, ash и ksh). Они также применяются к zsh (за исключением того, что = после пробела может потребоваться цитата). Правила в csh / tcsh и в Fish отличаются.