【问题标题】:Search file contents recursively when know where in file当知道文件在哪里时递归搜索文件内容
【发布时间】:2016-04-13 17:05:34
【问题描述】:

我有兴趣使用 bash 和相关工具(例如 sed、grep)有效地搜索文件中的内容,在特定情况下,我有关于文件中预期内容所在位置的附加信息。例如,我想替换每个文件第 3 行中包含文件第 3 行上的特定字符串的特定字符串。因此,我不想对整个目录执行递归grep -r,因为这会搜索整个每个文件,浪费时间,因为我知道感兴趣的字符串在第 3 行(如果存在)。这种完整的 grep 方法可以使用 grep -rl 'string_to_find_in_files' base_directory_to_search_recursively 完成。相反,我正在考虑使用sed -i ".bak" '3s/string_to_replace/string_to_replace_with' files 仅在目录中递归搜索所有文件的第 3 行,但是 sed 似乎只能将一个文件作为输入参数。如何递归地将 sed 应用于多个文件? find -exec {} \;find -print0 | xargs -0 似乎很慢。有没有比使用 find 更快的方法?使用awk 可以很快达到预期的效果,但仅在单个目录上,在我看来不是递归的,例如使用awk 'FNR==3{print $0}' directory/*。有什么办法可以使这个递归?谢谢。

【问题讨论】:

标签: awk sed grep find xargs


【解决方案1】:

您可以使用find 获取文件列表,并由xargs 一一提供给sedawk

例如,这将打印 find 列出的所有文件的第一行。

$ find . -name "*.csv" | xargs -L 1 sed -n '1p'

【讨论】:

  • 对我来说似乎很慢,我在问是否有更快的方法来实现这一点,完全依靠sed(或awk,或特定行调用grep,等等)。不过谢谢
  • 你有替代方法的计时数据吗?
猜你喜欢
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2012-12-01
  • 2014-08-27
  • 2014-09-11
  • 1970-01-01
  • 2010-12-24
  • 2012-06-15
相关资源
最近更新 更多