如何替换所有出现的 Word 在 Linux 命令行中的所有文件中

问题: 如何替换给定文件夹中所有文件中出现的所有单词?

考虑一个问题场景,您有一个网站,您经常在其中引用当前年份。 每年您都需要更新年份。 您可以轻松找到所有文件中的所有事件,但应避免在每个文件中手动更改年份。

解决方案

所以你会怎么做? 查找所有匹配项然后替换搜索词的几种方法之一是结合使用 find 和 sed 命令。

您可以使用一个命令轻松地做到这一点:在这个 example,您在 pages 文件夹中有 50 个网页。 此命令将立即将所有出现的“2017”更改为“2018”:

find ~/public_html/my_website/pages -type f -exec sed -i 's/2017/2018/g' {} ;

使上述 example 更通用一点,这是您需要做的:

find <path_to_directory> -type f -exec sed -i 's/<search_text>/<replace_text>/g' {} ;

在上述命令中,将 替换为实际数据。

解释

您在这里所做的是使用 find 命令获取当前目录及其子目录中的所有文件。 -type f 选项确保您只获取文件,而不是目录。

然后使用 exec 命令将结果传递给 sed 命令。 sed 命令搜索文本并替换它。

这 {} ; 是 exec 命令的一部分。 } 和 之间的空格是强制性的。

这个 Linux 快速提示是由 Linux 手册读者 Jane Hadley 提出的。 对这个问题有更好的解决方案吗? 在评论中分享。