
우분투 16.04를 사용하고 있습니다.
특정 단어를 검색하고 싶지만 해당 단어가 포함된 전체 파일을 터미널에 출력하여 파일에서 해당 단어가 있는 위치를 확인할 수도 있습니다. 그러나 를 사용하면 grep
전체 파일이 아닌 해당 단어가 포함된 특정 문장만 표시됩니다.
단어를 검색하고 단어가 있는 위치와 함께 전체 파일을 표시하려면 어떤 명령을 사용할 수 있습니까?
답변1
다음을 grep
사용할 수 있습니다.
$ grep -E -e 'pattern' -e '$' file
또는 단순화된 형태로:
$ grep -E 'pattern|$' file
기술적으로 이것도 작동합니다.
$ grep -E 'pattern|^' file
또는 : grep -E 'pattern|' file
. pattern
패턴이 전혀 없거나 전혀 없는 선을 말합니다 . 그러면 모든 것이 일치할 것입니다.
나는 grep
에 별칭을 지정 했으므로 grep --color=always
그렇지 않은 경우에는 색상 옵션을 직접 전달해야 합니다.
와 함께 less
:
$ less -p 'pattern' file
따라서 파일이 더 빨리 팝업되고 원하는 용어가 강조 표시되며 및 +를 사용하여 n일치 shift항목 n사이를 이동할 수 있습니다.
답변2
편집: 원래 답변의 질문을 잘못 해석했습니다.... 원하는 결과를 얻기 위해 편집했습니다. 출력에는 파일 이름만 표시되었습니다. less (Ravexina의 답변에서 알 수 있듯이)를 사용하여 전체 파일을 표시하기 위해 해당 출력을 사용하도록 이 답변을 편집했습니다 . 또한 디렉터리를 검색할 때 grep과 일치하는
파일(in)만 반환합니다. less
).
....그리고 바이너리 파일을 무시하도록 추가했는데 -I
, 이로 인해 less
상호 작용이 지저분해질 수 있습니다. 바이너리 파일이나 grep이 바이너리라고 "생각"할 수 있는 파일을 검색해야 하는 경우 이를 제거하십시오.
파일을 표시하려면 grep과 함께 "with-filename" 플래그를 사용하십시오. (플래그는 -H
)
나는 당신이 디렉토리와 그 안의 각 파일을 샅샅이 뒤지고 있다고 가정합니다. 현재 디렉터리 외부에서 검색하는 경우 *
결과가 없는 "디렉터리입니다" 오류를 방지하려면 를 사용하세요.
grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
또는
grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
또는 하위 디렉터리로 드릴다운하는 경우...
grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
패턴을 두 번 입력하는 것을 좋아하지 않습니다. 개선이 필요합니다.
답변3
파일에서 검색된 텍스트가 어디에 있는지 확인하려면 C 플래그를 사용하세요. 예를 들어:
grep -C 5 'MySearchText' *
텍스트가 포함된 줄과 의도한 검색 앞과 뒤의 5줄이 표시됩니다.
답변4
다른 답변을 보완하려면 옵션에 '-n'을 추가하여 왼쪽의 줄 번호를 볼 수 있습니다.
grep -n -C 3 "something" filename
3줄의 "Context"(예: "something"과 일치하는 줄 앞뒤 3줄)와 함께 "something"이 포함된 줄을 표시하며 표시된 각 줄의 시작 부분에 줄 번호가 추가됩니다.