grep: 후행 백슬래시

grep: 후행 백슬래시

grep 을 하고 싶습니다 \resources\. 어떻게 해야 하나요?

나는 시도했다:

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

이들 중 어느 것도 작동하지 않습니다.

답변1

많은 애플리케이션에서 백슬래시는 특수 문자입니다.

  • 셸 포함: 다른 백슬래시를 사용하거나 더 우아하게 이스케이프해야 합니다.하나의가능할 때마다 견적:

    $ printf '%s\n' foo\\bar 'foo\bar'
    foo\bar
    foo\bar
    

    여기서 명령은 값이 있는 두 개의 매개변수를 수신하며 foo\bar, 이는 터미널에 그대로 반영됩니다.

    (위에서 는 백슬래시를 자체적으로 해석하는 많은 구현을 printf대신 사용하고 있습니다 (여기에서는 백스페이스 문자로 확장됨).echoecho\b

  • 하지만 백슬래시는 특수 문자이기도 합니다 grep. 이 명령은 , 등 의 많은 특수 시퀀스를 인식할 수 있습니다 \(. 따라서 마찬가지로 실제 백슬래시 문자로 double을 grep에 제공해야 합니다. 이는 쉘을 사용하여 다음을 입력해야 함을 의미합니다.\|\.\\

    grep 'foo\\bar'
    

    또는 동등하게:

    grep foo\\\\bar
    

    (두 줄 모두 쉘에 foo\\bar인수로 전달하라고 지시합니다 grep).

  • 다른 많은 명령은 일부 인수에서 백슬래시를 해석하며 두 가지 수준의 이스케이프가 필요합니다(셸 해석을 위한 한 수준, 명령 해석을 위한 한 수준).


그건 그렇고, 쉘의 경우 작은 따옴표는 '…'모든 종류의 문자 해석을 방지하지만 큰 따옴표는 그 중 일부만 방지합니다. 특히 $, `\의 연결 유지 문자 "…".

답변2

사용할 수도 있습니다 fgrep(플래그에만 해당 grep) -F. 이렇게 하면 grep이 패턴을 고정 문자열로 해석하게 됩니다(즉, a를 \리터럴 로 처리함 \). 셸 확장으로부터 백슬래시를 보호해야 합니다.

grep -F '\resources\'

답변3

grep필요4개백슬래시는 백슬래시를 나타냅니다.

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

관련 정보