[linux] 정규식이 아닌 Grep

PHP 변수를 검색해야합니다 $someVar. 그러나 Grep은 내가 정규식을 실행하려고하고 불평하고 있다고 생각합니다.

$ grep -ir "Something Here" * | grep $someVar
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
$ grep -ir "Something Here" * | grep "$someVar"
<<Here it returns all rows with "someVar", not only those with "$someVar">>

grep에게 문자열을 정규식으로 해석 하지 않고$ 다른 문자열 문자로 포함하도록 지시 하는 옵션이 표시되지 않습니다 .



답변

그 앞에를 $넣어 탈출하십시오 \.


답변

fgrep(더 이상 사용 되지 않음) grep -F또는 grep --fixed-strings을 사용하여 패턴을 정규식 대신 고정 문자열 목록으로 처리합니다.

참고로 문서에는 다음이 언급되어 있습니다 (발췌).

-F --fixed-strings패턴을 개행으로 구분 된 고정 문자열 (정규 표현식 대신) 목록으로 해석합니다. (-F는 POSIX에 의해 지정됩니다.)

fgrep와 동일합니다 grep -F. fgrep과 같은 직접 호출은 더 이상 사용되지 않지만이를 사용하는 히스토리 애플리케이션이 수정되지 않은 상태로 실행될 수 있도록 제공됩니다.

전체 참조를 보려면 https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html을 확인하십시오.


답변

grep -Fgrep인수를 패턴이 아닌 고정 된 문자열로 해석 하도록 지시하는 표준 방법 입니다.


답변

grep에게 ‘-F’를 사용하여 패턴 대신 고정 문자열을 사용하도록 알려야합니다.

grep -ir "Something Here" * | grep -F \$somevar


답변

이 질문에서 주요 문제는 정규식으로 grep해석 $하는 것이 아닙니다 . $someVar환경 변수의 값으로 대체하는 쉘에 관한 것 입니다.someVar 것입니다. 아마도 빈 문자열입니다.

따라서 첫 번째 예에서는 grep인수없이 호출하는 것과 같 으며 이것이 usage출력을 제공하는 이유 입니다. 두 번째 예는 someVar빈 문자열이 모든 행에 있기 때문에 모든 행을 제외한 모든 행을 반환해서는 안됩니다 .

쉘이 대체하지 않도록 지시하려면 '$someVar'또는 을 사용해야 \$someVar합니다. 그런 다음 $캐릭터 의 grep 해석을 처리해야 하므로grep -F 다른 많은 답변에 제공된 옵션이 있습니다.

따라서 유효한 대답은 다음과 같습니다.

grep -ir "Something Here" * | grep '$someVar'


답변

-F옵션에 +1 하면 수락 된 답변이됩니다. 를 검색하는 동안 또한, 나는 “이상한”행동을했다 -I..같이, 내 파일에서 패턴 -I의 옵션으로 간주되었다 grep; 이러한 종류의 오류를 방지하기 위해를 사용하여 명령의 인수 끝을 명시 적으로 지정할 수 있습니다 --.

예:

grep -HnrF -- <pattern> <files>

누군가를 도울 수 있기를 바랍니다.


답변