【问题标题】:Print names of files with proper head打印具有正确头部的文件名
【发布时间】:2017-10-10 19:46:32
【问题描述】:

我想获取当前目录中文件的名称,使文件的第一行等于myWord。我想将find . -type f 命令与-exec 选项与head -1 filename 结合使用,但无济于事。这个问题有什么聪明的单线解决方案吗?

【问题讨论】:

  • 在 bash 中使用管道

标签: bash awk find head


【解决方案1】:

您可以将findawk 一起使用:

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 sed '/myword/F;Q'
  • @anubhava 那只搜索第一行。
  • 也可以将awk改写为awk '/myWord/{print FILENAME} {nextfile}'
猜你喜欢
  • 1970-01-01
  • 2020-06-06
  • 2023-04-07
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多