如何使用 sed 命令替换目录及其子目录中文件中的文本?


让我们考虑一个案例,假设我们有两个目录,例如 d1d2,这两个目录都包含一些文件,这些文件可能是相同或不同的。现在,我们希望使用 sed 命令替换可能存在于 d1 目录或 d2 目录中某些文件中的特定文本。

为了做到这一点,我们必须熟悉 sed 命令,因为 sed 命令可以用来解决上述问题。

让我们首先探索 sed 命令,它是 流编辑器的缩写。此命令用于对特定文件执行不同的功能,例如查找、替换、插入等等。

让我们探索一个案例,假设我们有两个目录 d1d2,这两个目录都包含一些文件。

请考虑以下终端输出,以显示这两个目录:

immukul@192 linux-questions-code % ls -ltr
total 0
drwxr-xr-x 5 immukul staff 160 Jul 5 20:03 d1
drwxr-xr-x 4 immukul staff 128 Jul 5 20:03 d2

现在,第一个目录 d1 的内容如下所示:

immukul@192 d1 % ls -ltr
total 0
-rw-r--r-- 1 immukul staff 0 Jul 5 20:03 1.txt
-rw-r--r-- 1 immukul staff 0 Jul 5 20:03 3.txt
-rw-r--r-- 1 immukul staff 0 Jul 5 20:03 5.tx

现在,第二个目录 d2 的内容如下所示:

immukul@192 d2 % ls -ltr
total 0
-rw-r--r-- 1 immukul staff 0 Jul 5 20:03 2.txt
-rw-r--r-- 1 immukul staff 0 Jul 5 20:03 3.txt

现在,如果我们打印 d1 目录中存在的文件的内容,我们将得到如下所示的内容:

immukul@192 d1 % cat 1.txt
orange

immukul@192 d1 % cat 3.txt

immukul@192 d1 % cat 5.txt
orange

我们可以看到,文件 1.txt 和 5.txt 中包含字符串“orange”。

现在,如果我们打印 d2 目录中存在的文件的内容,我们将得到如下所示的内容:

immukul@192 d2 % cat 2.txt
orange

immukul@192 d2 % cat 4.txt

我们可以看到,文件 2.txt 中包含字符串“orange”。

现在,我们希望使用单个命令将所有文件中字符串“orange”替换为“apple”,为此,我们在终端中输入以下命令

find ./ -type f -exec sed -i -e 's/orange/apple/g' {} \;

输出

immukul@192 d1 % cat 1.txt
apple

immukul@192 d1 % cat 3.txt

immukul@192 d1 % cat 5.txt
apple

immukul@192 d2 % cat 2.txt
apple

immukul@192 d2 % cat 4.txt

更新于: 2021年7月31日

739 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告