grep을 사용하여 작은 따옴표로 텍스트를 검색 하시겠습니까?


14

우분투 12.04에 터미널이 내장 된 gedit 텍스트 편집기를 사용하고 있습니다. 을 사용하여 일부 텍스트를 검색하려고합니다 grep. 이 코드 줄을 검색하고 싶습니다

'type' => 'select'

나는 시도했다 :

grep -r '\'type\' => \'select\''

그러나 grep결과를 반환하지 않았습니다.

누군가 위의 코드를 검색하는 방법을 친절하게 말해 줄 수 있습니까?

답변:


17

검색 문자열을 큰 따옴표로 묶으십시오.

grep "'type' => 'select'"

7

작은 따옴표 안에있는 작은 따옴표를 이스케이프 할 수 없습니다. [bash 매뉴얼]에 설명 된대로 : ( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ) :

작은 따옴표 ( '' ')로 문자를 묶으면 따옴표 안에 각 문자의 리터럴 값이 유지됩니다. 백 슬래시가 앞에 있어도 작은 따옴표 사이에는 작은 따옴표가 없을 수 있습니다 .

따라서 다른 접근 방식을 사용해야합니다.

  1. 큰 따옴표를 사용하십시오.

    grep  "'type' => 'select'" file 
    
  2. 불필요하게 복잡한 솔루션을 선호하는 경우 :

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. 작은 따옴표를 지정하는 대신 항상 단일 문자를 검색 할 수 있습니다.

    grep  '.type. => .select.' file 
    

그러나 그냥 사용 "하면 훨씬 간단합니다.


검색중인 문자열이 PHP 파일에 있고 변수를 포함하면 어떻게됩니까? 나는 정말로 이것으로 고투하고있다.
오브리 로버트슨

@AubreyRobertson 제대로 대답하려면 예가 필요합니다. 당신이 문자열 같은 것을 찾으려면 $var, 당신은 할 수있는 grep '$var' file.php작은 따옴표. 자세한 내용은 새로운 질문을 게시하고 여기에 의견을 남겨주세요. 기꺼이 도와 드리겠습니다.
terdon

나는 그것을 알아. grep을 방해하는 것은 달러 기호가 아니며 grep은 정규 표현식에 사용하기 때문에 배열 참조 (대괄호)였습니다. 이것은 내가 grep하려고했던 선입니다 : $output = $info['function']($variables); 나는 단지 이중 백 슬래시로 올바르게 탈출해야했습니다. 이것은 모든 말과 targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson

1

.txt 파일이 들어있는 디렉토리로 cd

cd /path 

그런 다음 :

당신이 사용할 수있는 grep "'type' => 'select'" name.txt

또는 :

`grep "'type' => 'select'" /path/file.txt

출력 :

여기에 이미지 설명을 입력하십시오


3
문제는 디렉토리 구조 나 grep다른 (약간 관련이없는) 기능이 아닌 작은 따옴표에만 해당됩니다 .
Chris

실제로 @Chris는 -r옵션으로 (OP 쓰기와 같이) 파일 이름이 필요하지 않습니다.
Brady Trainor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.