
여러 다른 파일의 두 문자열 사이에 있는 텍스트를 재귀적으로 검색하려고 합니다. 아래의 두 가지 모두 hit.txt 파일이 포함된 폴더를 검색할 때 작동하지만 더 높은 수준의 디렉터리에서 이 작업을 수행하고 싶기 때문에 두 가지 중 하나를 각 폴더에서 개별적으로 실행하지는 않습니다.
awk '/aaa/,/bbb/' hits.txt >> As.doc
sed -n '/aaa/,/bbb/p' hits.txt > As.doc
아래와 같은 재귀 검색을 수행하기 위해 다양한 grep 명령을 시도했지만 빈 문서만 생성됩니다.
grep -r --include='*.txt' '/aaa/,/bbb/' > As.doc
무엇이 가장 잘 작동하는지 또는 위 중 하나와 함께 find를 사용해야 하는지 잘 모르겠습니다.
답변1
이 유틸리티에는 two 및 has grep
와 같은 줄 범위 개념이 없으므로 표현식은 예상한 대로 작동하지 않습니다(슬래시와 쉼표를 포함한 리터럴 텍스트만 일치하므로 아마도 빈 결과가 나오는 이유일 것입니다).sed
awk
/aaa/,/bbb/
표시 sed
한 및 명령이 awk
작동하고 도움이 필요한 유일한 것은 이러한 명령을 .txt
현재 디렉터리에서 이름이 로 끝나는 파일에 재귀적으로 적용한다고 가정합니다.
find . -type f -name '*.txt' -exec awk '/aaa/,/bbb/' {} + >As.doc
또는
find . -type f -name '*.txt' -exec sed -n '/aaa/,/bbb/p' {} + >As.doc
이 명령은 현재 디렉터리 안이나 아래에서 모든 일반 파일을 찾아 일괄 호출 awk
이나 sed
유틸리티를 만듭니다. ( 또는 의 출력이 find
됨 ) 의 출력은 현재 디렉터리에서 호출된 파일로 리디렉션됩니다 (파일이 아직 존재하지 않으면 잘리거나(비어지거나) 생성됩니다).awk
sed
As.doc