您是否遇到过需要替换许多文件中的单词或句子的情况?您可以复制并粘贴它,或者也许有一个现有的脚本可以完成这项工作。但是,如果您只需要在其他地方用另一个单词或句子替换它呢?您可以使用 find,但这太通用了,需要为此任务编写脚本。如果您甚至不知道必须查找和替换哪个单词或句子怎么办?那么使用 sed 怎么样?如果您不熟悉 Unix 命令行,sed 是一个流编辑器。它是一个简单的文本编辑器,可以从标准输入中读取数据,并在读取时对流执行编辑操作。它通常用于脚本中的搜索和替换功能。
在本文中,我们将向您展示如何使用 sed 执行搜索和替换文件中的文本的一些示例。
查找并替换文件中的字符串
如果您只需要执行简单的搜索和替换,可以使用以下语法:
sed -i 's/string_to_find/string_to_replace/' file1 file2 fileN
Here:
-
-i:该标志向 sed 指示您的输入文件应该是命令后指定的文件之一。
-
要查找的字符串:这是您要在文件中搜索的字符串。
-
要替换的字符串:这是您要替换文件中的字符串what_to_find 的字符串。
-
文件1 文件2 文件N:这是 sed 将搜索和替换的文件列表。
以下命令将搜索所有字符串“Hello”welcome.txt
文件。然后在同一文件中将其替换为新字符串“Howdy”。
sed -i 's/Hello/Howdy/g' welcome.txt
您还可以在进行更改之前创建原始文件的备份-i
接下来是一些扩展。例如:
sed -i.backup 's/Hello/Howdy/g' welcome.txt
这将在当前目录中创建一个包含原始文件内容的文件welcome.txt.backup。
递归替换多个文件中的文本
以下命令有助于一次替换目录 /opt/docs 中多个文件中的字符串。这里find会定位到定义目录下的所有文件,并一一执行sed命令。
find /opt/docs/ -type f -exec sed -i 's/Hello/Howdy/g' {} ;
替换文本而不影响原始文件
如果您不想更改原始文件并使用更改后的字符串创建新文件,请使用以下命令。
sed 's/Hello/Howdy/g' welcome.txt > welcome_2.txt
该命令将创建一个新文件welcome_2.txt
带有修改后的文本。原始文件保持不变。
结论
sed 命令是一个功能强大的工具,可用于编辑文件中的文本。当您需要在许多文件中查找和替换字符串时,它非常有用。您可以使用 find,但这太通用并且需要编写脚本。如果您甚至不知道必须查找和替换哪个单词或句子怎么办?使用 sed 是一个更好的解决方案。