파일에서 단어를 검색하고 찾은 단어와 함께 전체 파일을 표시하는 방법은 무엇입니까?

파일에서 단어를 검색하고 찾은 단어와 함께 전체 파일을 표시하는 방법은 무엇입니까?

우분투 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"이 포함된 줄을 표시하며 표시된 각 줄의 시작 부분에 줄 번호가 추가됩니다.

관련 정보