Programing

grep을 사용하여 폴더 안에서 단어를 찾으려면 어떻게해야합니까?

lottogame 2020. 2. 13. 00:27
반응형

grep을 사용하여 폴더 안에서 단어를 찾으려면 어떻게해야합니까?


Windows에서는 폴더 내에서 단어를 찾기 위해 검색을 수행했을 것입니다. 마찬가지로 많은 하위 디렉토리와 파일을 포함하는 디렉토리에서 특정 단어가 발생하는지 알고 싶습니다. grep 구문을 검색하면 파일 이름, 즉을 지정해야합니다 grep string filename.

이제 파일 이름을 모르므로 어떻게해야합니까? 친구가 할 것을 제안 grep -nr string했지만 이것이 무엇을 의미하는지 모르겠으며 결과가 없습니다 (을 발행 할 때까지 응답이 없습니다 ctrl + c).


grep -nr 'yourString*' .

끝에있는 점은 현재 디렉토리를 검색합니다. 각 매개 변수의 의미 :

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' .( MobileAppServlet.java또는 MobileAppServlet.class또는 MobileAppServlet.txt;을 찾을 'MobileAppASer*.*'수 있지만 동일한 작업을 수행하는 다른 방법입니다.)

더 많은 매개 변수를 확인하려면 man grep 명령을 사용하십시오 .


grep -nr string my_directory

추가 사항 : grep [options] string filenameUnix 계열 시스템에서 디렉토리는 일종의 파일이기 때문에 구문을 만족시킵니다 (Windows에서는 "파일"이라고하는 엔티티를 구체적으로 지칭하는 "일반 파일"이라는 용어가 있습니다).

grep -nr string 표준 입력에서 검색 할 내용을 읽습니다. 따라서 입력을 기다리기만하고 ^ C를 누를 때 중지됩니다 (^ D에서 멈출 것입니다. 이는 종료의 핵심 조합입니다). -파일).


GREP : 글로벌 정규식 인쇄 / 파서 / 프로세서 / 프로그램.
이것을 사용하여 현재 디렉토리를 검색 할 수 있습니다.
"재귀"에 -R을 지정할 수 있습니다. 즉, 프로그램은 모든 하위 폴더와 하위 폴더 및 하위 폴더의 하위 폴더 등을 검색합니다.

grep -R "your word" .

-n파일에서 일치하는 줄 번호를 인쇄합니다.
-i대소 문자를 구분하지 않고 검색합니다 (대문자 / 비대 문자).

grep -inR "your regex pattern" .

또한있다 :

find directory_name -type f -print0 | xargs -0 grep -li word

하지만 초보자에게는 다소 도움이 될 것입니다.

find-type f"디렉토리 및 명명 된 파이프가 아닌 일반 파일을 찾는 것"및 " -print0널 문자를 구분 기호로 사용하여 표준 출력에 인쇄 "를 의미 하는 범용 디렉토리 워커 / 리스너 입니다. 에서 출력 find이 전송되어 xargs -0표준 줄 바꿈 대신 레코드 구분자로 널 문자를 사용하여 표준 입력을 청크로 표시합니다 (명령 행 길이 제한을 피하기 위해) grep -li word. 각 파일 세트에 적용됩니다 . grep, -l수단 "파일 목록 일치하는"및 -i수단 "의 경우를 구분"; 일반적으로 단일 문자 옵션을 결합하여 -li보다 자주 볼 수 있습니다 -l -i.

당신이 사용하지 않는 경우 -print0그리고 -0당신은 그들을 사용하는 것은 좋은 습관이다, 그래서 공백이 포함 된 파일 이름 문제로 실행됩니다.


grep -nr search_string search_dir

search_string에 대해 RECURSIVE (디렉토리 및 모든 서브 디렉토리를 의미 함) 검색을 수행합니다. (USTA가 올바르게 대답 한대로).

친구의 제안에 대해 아무런 대답을하지 못한 이유는 다음과 같습니다.

grep -nr string

디렉토리가 지정되지 않았기 때문입니다. 검색하려는 디렉토리에있는 경우 다음을 수행해야합니다.

grep -nr string .

'.'를 포함하는 것이 중요합니다. grep에게이 디렉토리를 검색하도록 지시합니다.


  1. grep -r "yourstring" * 모든 파일과 폴더에서 "yourstring"을 찾습니다

이제 두 개의 다른 문자열을 동시에 찾으려면 언제든지 옵션 E를 사용하고 검색 할 단어를 추가 할 수 있습니다. 휴식 후의 예

  1. grep -rE "yourstring|yourotherstring|$" *목록의 위치를 검색 할 수 yourstring또는 yourotherstring일치

하위 디렉토리에서 모든 인스턴스를 찾기 위해 재귀 검색을 수행하지 않는 이유는 무엇입니까?

grep -r 'text' *

이것은 매력처럼 작동합니다.


내가 사용하고 싶은 다른 옵션 :

find folder_name -type f -exec grep your_text  {} \;

-type f는 폴더가 아닌 파일 만 반환합니다.

-exec 및 {}은 검색에서 찾은 파일에서 grep을 실행합니다 (정확한 구문은 "-exec 명령 {}"입니다).


grep -R "string" /directory/

-r이 그렇지 않은 경우 -R도 심볼릭 링크를 따릅니다.


선택한 답변은 훌륭하고 작동하지만 다음과 같은 이유로 올바른 방법이 아닙니다.

grep -nr yourString* .

실제로 문자열을 검색 "yourStrin"하고 "g"0 번 또는 여러 번 검색합니다 .

따라서 올바른 방법은 다음과 같습니다.

grep -nr \w*yourString\w* .

이 명령은 현재 폴더에서 전후의 문자를 사용하여 문자열을 검색합니다.


@eLRuLL이 게시 한 답변과 유사하게 단어 경계를 존중하는 검색을 지정하는 더 쉬운 방법은 -w옵션 을 사용하는 것입니다.

grep -wnr "yourString" .

grep을 사용하지 마십시오. Silver Searcher 또는 ripgrep을 다운로드 하십시오 . 그것들은 뛰어난 옵션으로 grep이나 ack보다 빠릅니다.

참고 URL : https://stackoverflow.com/questions/4121803/how-can-i-use-grep-to-find-a-word-inside-a-folder



반응형