Я хочу зробити греп \resources\. Як це зробити?
Я спробував:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
Я хочу зробити греп \resources\. Як це зробити?
Я спробував:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
Відповіді:
Нахил нахилу - це особливий символ для багатьох застосувань:
включаючи оболонку: вам потрібно уникнути цього, використовуючи інший зворотний нахил або більш елегантно, використовуючи поодинокі лапки, коли це можливо:
$ printf '%s\n' foo\\bar 'foo\bar'
foo\bar
foo\bar
Тут команда отримала два аргументи зі значенням foo\bar, які перегукувалися як є на терміналі.
(Вище я використовував printfзамість echoбагатьох echoреалізацій також власне тлумачення зворотної косої риси (тут би \bперетворився на символ зворотної області )).
Але зворотний кут - це також особливий символ grep. Ця команда розпізнає багато спеціальних послідовностей , таких як \(, \|, \., і так далі. Точно так само вам потрібно подати grep з подвійним \\для фактичного символу зворотної косої риси. Це означає, що, використовуючи оболонку, потрібно ввести:
grep 'foo\\bar'
або еквівалентно:
grep foo\\\\bar
(обидва рядки повідомляють оболонці, яку слід передати foo\\barяк аргумент grep).
Багато інших команд інтерпретують звороту косу рису в деяких своїх аргументах ... і потрібні два рівні втечі (один, щоб уникнути інтерпретації оболонки, один - щоб уникнути інтерпретації команд).
До речі, для оболонки одиничні лапки '…'перешкоджають будь-якому виду інтерпретації символів, але подвійні цитати заважають лише деяким з них: зокрема $, `і \залишаються активними символами всередині "…".
Ви також можете використовувати fgrep(що як раз grepіз -Fпрапором). Це змушує греп інтерпретувати шаблон як фіксований рядок (тобто він буде розглядатись \як буквальний \). Вам все одно потрібно буде захистити нахил від накиду від розширення.
grep -F '\resources\'
..\і навіть '..\\'не отримав бажаних результатів. grep -F '..\'отримав мене, що я хотів! Спасибі
grepДля відображення зворотної косої риски потрібно чотири нахили:
grep "\\\\resources\\\\"
grepпотрібен лише 1 зворотний нахил, щоб уникнути чергової косої риси, але оболонка також вимагає цитування зворотної косої риски. Подвійні лапки ( ") НЕ цитують звороту косу рису, а зворотну косу рису роблять, тому подвійні лапки у вашому прикладі нічого не роблять, а замість них потрібні 4 косої косої риски.
grep '\\resources\\'