如何使用 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