如何在目录中的前 50 行文件中搜索给定字符串?我特别在寻找哪个数据库表文件(来自 mysqldump)定义了一个特定的字段,但我不想 grep 整个文件,在 20-40 行 CREATE TABLE 之后继续到数百个 INSERT 语句。
我可以编写一个 Python 脚本来迭代每个文件的前几行,但是从经验来看,Python 虽然功能强大,但速度很慢。我有超过 200 个 *.sql 文件要处理,我想学习一个解决方案,无论如何我都可以在将来推广它。
Ste*_*itt 10
awk
(假设您的实现支持该nextfile
语句)可以很好地做到这一点:
awk 'FNR > 50 { nextfile }; /foobar/ { print FILENAME ": " $0 }' ./*.sql
Run Code Online (Sandbox Code Playgroud)
一旦处理了 50 条记录,第一条语句就会跳到下一个文件。第二个语句打印文件名和包含foobar
.
如果您awk
没有nextfile
此变体也可以使用,尽管我认为它的效率会降低:
awk 'FNR <= 50 && /foobar/ { print FILENAME ": " $0 }' ./*.sql
Run Code Online (Sandbox Code Playgroud)
这个解决方案有效,但我觉得它很笨拙。在前 50 行中搜索字符串“foobar”:
$ for I in *.sql ; do echo $I && head -n 50 $I | grep foobar ; done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2300 次 |
最近记录: |