1行目または2行目にN文字以上あるすべてのPHPファイルを検索します

1行目または2行目にN文字以上あるすべてのPHPファイルを検索します

サーバー上の最初の行または 2 行目に N 文字を超える文字が含まれるすべての PHP ファイルを検索したいと思います。

見つかったファイル名と行の内容の両方を印刷したいと思います。

どうすればいいでしょうか? 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$'
  • ファイルの 2 行目を取得し、文字数を数えます。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オプションは、1 つのファイルのみが grep された場合でもファイル名を出力します (これは、見つかったすべてのファイルが演算子によって個別に grep されるためです{})。

関連情報