grep을 사용하여 내 레일 디렉토리를 검색하려고합니다. 특정 단어를 찾고 있는데 grep 파일 이름과 줄 번호를 인쇄하고 싶습니다.
나를 위해 이것을 할 grep 플래그가 있습니까? 나는의 조합을 사용하는 것을 시도하고있다 -n
및 -l
그러나이 중 하나없는 번호로 파일 이름을 인쇄하거나 쉽게 읽을 수 없습니다 터미널에 많은 텍스트를 덤핑하고 있습니다.
전의:
grep -ln "search" *
awk로 파이프해야합니까?
grep을 사용하여 내 레일 디렉토리를 검색하려고합니다. 특정 단어를 찾고 있는데 grep 파일 이름과 줄 번호를 인쇄하고 싶습니다.
나를 위해 이것을 할 grep 플래그가 있습니까? 나는의 조합을 사용하는 것을 시도하고있다 -n
및 -l
그러나이 중 하나없는 번호로 파일 이름을 인쇄하거나 쉽게 읽을 수 없습니다 터미널에 많은 텍스트를 덤핑하고 있습니다.
전의:
grep -ln "search" *
awk로 파이프해야합니까?
답변:
-l
의 출력을 억제하기 때문에 너무 제한적 이라고 생각 -n
합니다. 나는 제안 할 것입니다 -H
( --with-filename
) : 각 일치에 대한 파일 이름을 인쇄하십시오.
grep -Hn "search" *
출력량이 너무 많으면 -o
일치하는 부분 만 인쇄 해보십시오 .
grep -nHo "search" *
grep -rin searchstring * | cut -d: -f1-2
즉, 재귀 적으로 검색 ( searchstring
이 예 에서는 문자열 )하고 대소 문자를 무시하고 줄 번호를 표시합니다. 그 grep의 출력은 다음과 같습니다.
/path/to/result/file.name:100: Line in file where 'searchstring' is found.
다음 :
으로 필드 구분 기호로 콜론 을 사용 하고 필드 1 ~ 2를 표시 하는 cut 명령으로 결과를 파이프합니다 .
줄 번호가 필요하지 않을 때는 자주 사용하고 -f1
(파일 이름과 경로 만) 출력을으로 파이프하여 uniq
각 파일 이름을 한 번만 볼 수 있습니다.
grep -ir searchstring * | cut -d: -f1 | uniq
나는 사용하는 것을 좋아한다 :
grep -niro 'searchstring' <path>
그러나 그것은 내가 항상 다른 방법을 잊고 어떤 이유로 로버트 드 grep -
니로 를 잊을 수 없기 때문입니다 :)
@ToreAurstad의 주석은 철자가 입력 grep -Horn 'search' ./
되어 기억하기 쉽습니다.
grep -HEroine 'search' ./
또한 작동 할 수 있습니다;)
호기심 :
$ grep --help | grep -Ee '-(H|E|r|o|i|n|e),'
-E, --extended-regexp PATTERNS are extended regular expressions
-e, --regexp=PATTERNS use PATTERNS for matching
-i, --ignore-case ignore case distinctions
-n, --line-number print line number with output lines
-H, --with-filename print file name with output lines
-o, --only-matching show only nonempty parts of lines that match
-r, --recursive like --directories=recurse