여러 파일에서 여러 문자열을 검색하고 "한 줄에 각 파일에 대한 결과"를 인쇄합니다.

여러 파일에서 여러 문자열을 검색하고 "한 줄에 각 파일에 대한 결과"를 인쇄합니다.

Linux의 검색 방법에 다음과 같은 문제가 있습니다. 폴더의 모든 파일에서 여러 문자열(예 text1: 및 ) 을 검색하고 싶습니다 . 이 문자열을 포함하는 모든 줄을 찾고 싶습니다text2text3단 한 줄로 각 파일의 결과를 인쇄합니다..

나는 grepand를 사용했지만 awk결과는 항상 여러 행에 걸쳐 분산되어 있습니다. 누군가 내가 좋은 방법을 찾도록 도와줄 수 있나요?

단일 파일의 일부 검색 문자열에는 두 번과 같이 여러 일치 항목이 있을 수 있으며 text3출력에 필요합니다.

답변1

이 시도:

grep -Er "string 1|string 2|string 3" /folder|\
awk '{COLON1=index($0,":")
      FILE=substr($0,1,COLON1)
      if (FILE!=PREVFILE) { printf "\n"FILE": "} else printf " % "
      printf "%s",substr($0,COLON1+1)
      PREVFILE=FILE
     }
     END {print "\n"}'

이렇게 하면 각 파일에 대한 모든 결과가 한 줄에 표시되며 각 결과(여러 개인 경우)는 "%"로 구분됩니다. 지정된 폴더(하위 폴더 제외)의 모든 파일을 검색합니다. 이해하기 쉽도록 여러 줄에 표시했지만 한 줄로 작성할 수도 있습니다. awk 명령 사이에 새 줄 대신 세미콜론을 사용하면 됩니다.

관련 정보