![여러 파일에서 여러 문자열을 검색하고 "한 줄에 각 파일에 대한 결과"를 인쇄합니다.](https://linux55.com/image/165860/%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EA%B3%A0%20%22%ED%95%9C%20%EC%A4%84%EC%97%90%20%EA%B0%81%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EB%8C%80%ED%95%9C%20%EA%B2%B0%EA%B3%BC%22%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Linux의 검색 방법에 다음과 같은 문제가 있습니다. 폴더의 모든 파일에서 여러 문자열(예 text1
: 및 ) 을 검색하고 싶습니다 . 이 문자열을 포함하는 모든 줄을 찾고 싶습니다text2
text3
단 한 줄로 각 파일의 결과를 인쇄합니다..
나는 grep
and를 사용했지만 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 명령 사이에 새 줄 대신 세미콜론을 사용하면 됩니다.