知道文件中的位置时递归搜索文件内容

时间:2016-01-08 21:57:29

标签: awk sed grep find xargs

我感兴趣的是使用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/*。有什么办法让这个递归?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用find获取文件列表,并sed

逐一提供给awkxargs 例如,这将打印由find列出的所有文件的第一行。

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