查找所有第一行或第二行字符数超过 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 的{}

相关内容