grep: зворотний нахил


23

Я хочу зробити греп \resources\. Як це зробити?

Я спробував:

grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"

Жоден з цих не працює .


5
Використовуйте одинарні лапки замість подвійних лапок, щоб уникнути інтерпретації зворотних косих башів. grep '\\resources\\'
Пол Томблін

Відповіді:


27

Нахил нахилу - це особливий символ для багатьох застосувань:

  • включаючи оболонку: вам потрібно уникнути цього, використовуючи інший зворотний нахил або більш елегантно, використовуючи поодинокі лапки, коли це можливо:

    $ 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).

  • Багато інших команд інтерпретують звороту косу рису в деяких своїх аргументах ... і потрібні два рівні втечі (один, щоб уникнути інтерпретації оболонки, один - щоб уникнути інтерпретації команд).


До речі, для оболонки одиничні лапки '…'перешкоджають будь-якому виду інтерпретації символів, але подвійні цитати заважають лише деяким з них: зокрема $, `і \залишаються активними символами всередині "…".


18

Ви також можете використовувати fgrep(що як раз grepіз -Fпрапором). Це змушує греп інтерпретувати шаблон як фіксований рядок (тобто він буде розглядатись \як буквальний \). Вам все одно потрібно буде захистити нахил від накиду від розширення.

grep -F '\resources\'

Прапор там є чомусь! Я намагався поздоровитись ..\і навіть '..\\'не отримав бажаних результатів. grep -F '..\'отримав мене, що я хотів! Спасибі
FreeSoftwareServers

.. Спробуйте відформатувати коментар правильно! -> meta.stackexchange.com/questions/201663/…
FreeSoftwareServers

3

grepДля відображення зворотної косої риски потрібно чотири нахили:

grep "\\\\resources\\\\"

12
Це досить оманливе спрощення. grepпотрібен лише 1 зворотний нахил, щоб уникнути чергової косої риси, але оболонка також вимагає цитування зворотної косої риски. Подвійні лапки ( ") НЕ цитують звороту косу рису, а зворотну косу рису роблять, тому подвійні лапки у вашому прикладі нічого не роблять, а замість них потрібні 4 косої косої риски.
jw013

Мені довелося використовувати чотири зворотні косої риски в Windows, хоча командний рядок Windows не поводиться з косою рисою, як * nix. Цікаво, чи порти GnuWin неправильно зрозуміли ефект оболонки і жорстко закодували вимогу 4-косою косою рисою, думаючи, що це те, що потрібно grep.
Synetech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.