【发布时间】: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/*。有什么办法可以使这个递归?谢谢。
【问题讨论】:
-
这不演示递归,如果你在目录
tmp上调用sed就会这样做