Я хочу зробити греп \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\\'