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

时间:2020-03-05 15:29:18  来源:igfitidea点击:

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

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

解决方案

所以你会怎么做?
查找所有出现然后替换搜索到的术语的几种方法之一是结合使用find和sed命令。

我们只需一个命令即可轻松实现:在此示例中,页面文件夹中有50个网页。
该命令将立即将所有出现的“ 2016”更改为“ 2016”:

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

为了使上面的示例更通用一些,这是我们需要做的:

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

在上面的命令中,将<path_to_directory>,<search_text>和<replace_text>替换为实际数据。

解释

我们在此处执行的操作是使用find命令来获取当前目录及其子目录中的所有文件。
-type f选项可确保仅获取文件,而不获取目录。

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

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