여러 개의 빈 줄이 있는 파일을 찾는 방법은 무엇입니까?

여러 개의 빈 줄이 있는 파일을 찾는 방법은 무엇입니까?

~을 위한여러 개의 빈 줄을 단 하나의 빈 줄로 바꾸기먼저 큰 저장소에서 적용할 파일을 찾아야 합니다. 어떻게 해야 하나요?

답변1

이것pcregrep이 유틸리티는 여러 줄 패턴의 일치를 지원하므로 쉽습니다.

먼저 내 git 저장소에서 검색할 파일 목록이 필요합니다.자식 검색이를 위해서는 유틸리티가 유용하지만 일반 find(1)도구와 기타 도구도 작동합니다.

파일 목록을 에 전달하고 pcregrep출력을 임시 파일에 덤프한 다음 작업하기 전에 파일 목록을 수동으로 확인합니다(예: 첫 번째 목록에 있는 바이너리 제거).

# easy to type version
git find | xargs pcregrep -l -M $'\n\n\n' >/tmp/x
# more secure version
git find -print0 | xargs -0r pcregrep -l -M $'\n\n\n' >/tmp/x

노트:$'…'기능에는 쉘 지원이 필요합니다(GNU bash, AT&T ksh93, mksh, zsh 및 POSIX sh는 모두 향후 표준 릴리스에서 지원됩니다). 그렇지 않으면 을 입력하고 'Enter를 세 번 누른 후 '다시 입력합니다.

초기 목록이 충분히 명확하면 결과 목록에서 직접 작업할 수 있습니다.

# easy to type version
$EDITOR $(git find \*.java | xargs pcregrep -l -M $'\n\n\n')
# somewhat more secure version
git find -print0 | xargs -0r pcregrep -l -M $'\n\n\n' | xargs $EDITOR --

⚠ 파일 이름에 다음이 포함되지 않는 한 "더 안전한" 버전이 필요합니다.어느공백도 아닌 "재미있는" 문자! 마지막 예에서 "약간 더 안전하다"는 것은 -lpcregrep의 옵션이 항상 LF로 출력을 종료하고 NUL로 출력을 종료하는 옵션이 없기 때문에 이 솔루션을 사용하면 줄바꿈이 포함된 파일 이름이 항상 안전하지 않다는 문제를 나타냅니다.

답변2

그리고awk지원되는 구현nextfile:

... -print0 | xargs -r0 awk '
    FNR == 1 {n = 0}
    $0 == "" {
      if (++n == 2) {
        print FILENAME
        nextfile
      }
      next
    }
    {n = 0}'

printf "%s\0", FILENAME파일 이름을 NUL로 구분하여 변경합니다 . 빈 줄 대신 빈 줄을 확인 $0 == ""하도록 변경되었습니다 .!NF

관련 정보