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.