첫 번째 또는 두 번째 줄에 N자 이상이 포함된 모든 PHP 파일을 찾습니다.

첫 번째 또는 두 번째 줄에 N자 이상이 포함된 모든 PHP 파일을 찾습니다.

내 서버에서 첫 번째 줄이나 두 번째 줄에 N자 이상이 있는 모든 PHP 파일을 찾고 싶습니다.

발견된 파일 이름과 줄 내용을 모두 인쇄하고 싶습니다.

어떻게 해야 할까요? grep을 수행하려고 생각 중이지만 grep으로 파일의 행을 분석하는 방법을 모르겠습니다.

답변1

이를 수행하는 방법은 다음과 같습니다.

MIN_WIDTH=30

for f in $(find / -iname  '*\.php'); do
  if [ $(head -n 2 "$f" | tail -n 1 | wc -c) -gt $MIN_WIDTH ] || [ $(head -n 1 "$f" | wc -c) -gt $MIN_WIDTH ]; then    
    echo "$f";
  fi
done

분석은 다음과 같습니다.

  • 모든 파일을 조회합니다 .php: find / -regex '.*\.php$'
  • 파일의 두 번째 줄을 가져와 문자 수를 계산합니다.head -2 "$f" | tail -1 | wc -c
  • 파일의 첫 번째 줄을 가져와 문자 수를 계산합니다.head -1 "$f" | wc -c
  • 각각이 $MIN_WIDTH보다 큰지 비교: `[ $(…) -gt $MIN_WIDTH ]
  • 둘 중 하나가 다음보다 큰 경우 $MIN_WIDTH:if […] | […]
  • 파일 이름을 출력합니다:echo "$f"

답변2

zmo보다 다소 짧은 변형

find -iname "*.php" -exec grep -HP '.{6,}' {} \; | grep -P '^.+:[12]:'

여기서 6은 최소 문자 수입니다. 옵션 -H은 파일에서만 grep되는 경우에도 파일 이름을 인쇄하는 것입니다(이 경우는 발견된 모든 파일이 연산자를 통해 별도로 grep되기 때문입니다 {})

관련 정보