에 대한 grep을하고 싶습니다 \resources\
. 어떻게해야합니까?
난 노력 했어:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
에 대한 grep을하고 싶습니다 \resources\
. 어떻게해야합니까?
난 노력 했어:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
답변:
백 슬래시는 많은 응용 프로그램의 특수 문자입니다.
쉘 포함 : 가능하면 작은 따옴표를 사용하여 다른 백 슬래시를 사용하거나보다 우아하게 탈출해야 합니다.
$ printf '%s\n' foo\\bar 'foo\bar'
foo\bar
foo\bar
여기서 명령은 value와 함께 두 개의 인수를 수신 foo\bar
했으며 터미널에있는 그대로 에코됩니다.
(전에는 많은 구현이 백 슬래시를 자체적으로 해석 하는 printf
대신 사용 했습니다 (여기서는 백 스페이스 문자로 확장 됩니다)).echo
echo
\b
그러나 백 슬래시는 또한 특수 문자입니다 grep
. 이 명령은 같은 많은 특별한 순서 인식 \(
, \|
, \.
, 등을. 마찬가지로 \\
실제 백 슬래시 문자에 대해 grep을 이중으로 공급해야합니다 . 이것은 쉘을 사용하여 다음을 입력해야 함을 의미합니다.
grep 'foo\\bar'
또는 동등하게 :
grep foo\\\\bar
(두 줄은 모두 쉘에게에 대한 foo\\bar
인수로 전송 하도록 지시합니다 grep
).
다른 많은 명령은 일부 인수에서 백 슬래시를 해석합니다. 두 가지 레벨의 이스케이프가 필요합니다 (하나는 쉘 해석을 피하기 위해, 하나는 명령 해석을 피하기 위해).
그런데, 쉘, 작은 따옴표는 '…'
문자 해석의 어떤 종류를 방지하지만, 큰 따옴표는 단지 그들 중 일부 방지 : 특히 $
, `
그리고 \
내 활성 문자가 남아있다 "…"
.
당신은 또한 사용할 수 있습니다 fgrep
(단지 인 grep
와 -F
플래그). 그러면 grep이 패턴을 고정 문자열로 해석합니다 (즉 \
,를 리터럴로 처리합니다 \
). 여전히 쉘에 의해 백 슬래시가 확장되지 않도록 보호해야합니다.
grep -F '\resources\'
..\
심지어 '..\\'
원하는 결과를 얻지 못했습니다. grep -F '..\'
내가 원하는 걸 얻었 어! 감사합니다
grep
백 슬래시를 나타내 려면 네 개의 백 슬래시가 필요합니다 .
grep "\\\\resources\\\\"
grep
다른 백 슬래시를 이스케이프 처리하려면 백 슬래시 1 개만 필요하지만 셸에는 백 슬래시도 인용해야합니다. 큰 따옴표 ( "
)는 백 슬래시를 인용하지 않지만 백 슬래시는 따옴표를 사용하므로 예제에서 큰 따옴표는 아무 것도하지 않고 대신 4 개의 백 슬래시가 필요합니다.
grep '\\resources\\'