나는 많은 하위 디렉토리가 있는 디렉토리를 가지고 있는데, 모두 "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 }' {} +