我想在我的服务器上找出所有第一行或第二行包含超过 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_WIDTH
:if […] | […]
- 打印出文件的名称:
echo "$f"
答案2
比 zmo 稍短的版本
find -iname "*.php" -exec grep -HP '.{6,}' {} \; | grep -P '^.+:[12]:'
其中 6 是最小字符数。-H
即使只 grep 了一个文件,也可以打印文件名(这是因为每个找到的文件都是通过运算符单独 grep 的{}
)