【发布时间】:2017-10-10 19:46:32
【问题描述】:
我想获取当前目录中文件的名称,使文件的第一行等于myWord。我想将find . -type f 命令与-exec 选项与head -1 filename 结合使用,但无济于事。这个问题有什么聪明的单线解决方案吗?
【问题讨论】:
-
在 bash 中使用管道
我想获取当前目录中文件的名称,使文件的第一行等于myWord。我想将find . -type f 命令与-exec 选项与head -1 filename 结合使用,但无济于事。这个问题有什么聪明的单线解决方案吗?
【问题讨论】:
您可以将find 与awk 一起使用:
find . -maxdepth 1 -type f -exec awk '/myWord/{print FILENAME} {nextfile}' {} +
awk 命令将在每个文件的第一行搜索单词myWord,然后打印该文件名。
或者使用gnu sed:
find . -type f -exec sed '/myWord/F;Q' {} \;
非常感谢 @chepner 和 @123 在此答案下方提供了非常有帮助的 cmets。
【讨论】:
-maxdepth 1 只做当前目录
awk 进程的数量,请使用-exec awk 'FNR==1 && /myWord/ { print FILENAME }; { nextfile; }' {} +
sed '/myword/F;Q'
awk '/myWord/{print FILENAME} {nextfile}'