grep : 후행 백 슬래시


답변:


27

백 슬래시는 많은 응용 프로그램의 특수 문자입니다.

  • 쉘 포함 : 가능하면 작은 따옴표를 사용하여 다른 백 슬래시를 사용하거나보다 우아하게 탈출해야 합니다.

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

    여기서 명령은 value와 함께 두 개의 인수를 수신 foo\bar했으며 터미널에있는 그대로 에코됩니다.

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

  • 그러나 백 슬래시는 또한 특수 문자입니다 grep. 이 명령은 같은 많은 특별한 순서 인식 \(, \|, \., 등을. 마찬가지로 \\실제 백 슬래시 문자에 대해 grep을 이중으로 공급해야합니다 . 이것은 쉘을 사용하여 다음을 입력해야 함을 의미합니다.

    grep 'foo\\bar'
    

    또는 동등하게 :

    grep foo\\\\bar
    

    (두 줄은 모두 쉘에게에 대한 foo\\bar인수로 전송 하도록 지시합니다 grep).

  • 다른 많은 명령은 일부 인수에서 백 슬래시를 해석합니다. 두 가지 레벨의 이스케이프가 필요합니다 (하나는 쉘 해석을 피하기 위해, 하나는 명령 해석을 피하기 위해).


그런데, 쉘, 작은 따옴표는 '…'문자 해석의 어떤 종류를 방지하지만, 큰 따옴표는 단지 그들 중 일부 방지 : 특히 $, `그리고 \내 활성 문자가 남아있다 "…".


18

당신은 또한 사용할 수 있습니다 fgrep(단지 인 grep-F플래그). 그러면 grep이 패턴을 고정 문자열로 해석합니다 (즉 \,를 리터럴로 처리합니다 \). 여전히 쉘에 의해 백 슬래시가 확장되지 않도록 보호해야합니다.

grep -F '\resources\'

깃발은 이유가 있습니다! 나는 grep하려고했지만 ..\심지어 '..\\'원하는 결과를 얻지 못했습니다. grep -F '..\'내가 원하는 걸 얻었 어! 감사합니다
FreeSoftwareServers

.. 주석을 올바르게 포맷하십시오! -> meta.stackexchange.com/questions/201663/…
FreeSoftwareServers 2018

3

grep백 슬래시를 나타내 려면 네 개의 백 슬래시가 필요합니다 .

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

12
이것은 다소 오해의 소지가 있습니다. grep다른 백 슬래시를 이스케이프 처리하려면 백 슬래시 1 개만 필요하지만 셸에는 백 슬래시도 인용해야합니다. 큰 따옴표 ( ")는 백 슬래시를 인용하지 않지만 백 슬래시는 따옴표를 사용하므로 예제에서 큰 따옴표는 아무 것도하지 않고 대신 4 개의 백 슬래시가 필요합니다.
jw013

Windows 명령 프롬프트가 * nix처럼 백 슬래시를 처리하지 않더라도 Windows에서 4 개의 백 슬래시를 사용해야했습니다. GnuWin 포트가 쉘의 효과를 잘못 이해하고 4 슬래시 요구 사항을 하드 코딩 하여 궁금한 점이 있는지 궁금합니다 grep.
Synetech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.