尋找第一行或第二行超過N個字元的所有php文件

尋找第一行或第二行超過N個字元的所有php文件

我想找到我的伺服器上第一行或第二行包含超過 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$'
  • 取得文件的第二行並計算字元數:head -2 "$f" | tail -1 | wc -c
  • 取得檔案的第一行並計算字元數:head -1 "$f" | wc -c
  • 比較每個是否大於 $MIN_WIDTH:`[ $(…) -gt $MIN_WIDTH ]
  • 如果其中任何一個大於$MIN_WIDTHif […] | […]
  • 列印出檔案名稱:echo "$f"

答案2

比 zmo 稍短的變體

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

其中 6 是最小字元數。該-H選項是列印檔案名,即使僅對檔案進行 grep 處理(就是這種情況,因為每個找到的檔案都透過運算符單獨進行 grep 處理{}

相關內容