하위 디렉터리에 있는 모든 파일의 특정 문자열 아래 5줄을 모두 인쇄합니다.

하위 디렉터리에 있는 모든 파일의 특정 문자열 아래 5줄을 모두 인쇄합니다.

나는 많은 하위 디렉토리가 있는 디렉토리를 가지고 있는데, 모두 "name" 파일을 갖고 있고, 각 파일 "name"의 각 문자열 "str" ​​아래에 5줄을 인쇄하고 싶습니다.

답변1

"str"이 포함된 줄을 찾으면 다음 5줄이 인쇄됩니다. (이것이 당신이 원하는 것이기를 바랍니다):

find . -type f -name name | xargs awk '/^str$/ {i=1; next;} \
                                           i>0 {print; if(i<5) i++; else i=0;}'

답변2

grep 사용

find -type f -name "name" -exec grep -F -h "str" -A5 {} +

그러면 "name"이라는 이름의 모든 파일을 찾고 문자열 "str"을 찾는 각 파일에 대해 grep을 수행합니다. 이 -A5플래그를 사용하려면 grep각 게임 후에 5개의 라인이 표시되어야 합니다. 파일 이름이 표시되지 않도록 -h합니다 .grep

sed와 함께

find -type f -name "name" -exec sed -n -s '/txt/,+5 p' {} +

여기도 마찬가지다. sed -n줄이 인쇄되지 않습니다. 라인이 /txt/,+5블록 내에 있는 경우에만 출력이 수행됩니다. 이는 "'txt'를 포함하는 라인에서 시작하는 6개 라인"(포함)을 의미합니다.

일치하는 줄이 없습니다

두 솔루션 모두 "txt"가 포함된 줄을 인쇄합니다. 원하지 않으면 sed다음을 사용하여 제거하십시오.

find -type f -name "name" -exec sed -n -s '/txt/,+5 { /txt/ d; p }' {} + 

관련 정보