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
대신 사용하고 있습니다 (여기에서는 백스페이스 문자로 확장됨).echo
echo
\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\\\\"