如何使用 sed 命令替换目录及其子目录中文件中的文本?
让我们考虑一个案例,假设我们有两个目录,例如 d1 和 d2,这两个目录都包含一些文件,这些文件可能是相同或不同的。现在,我们希望使用 sed 命令替换可能存在于 d1 目录或 d2 目录中某些文件中的特定文本。
为了做到这一点,我们必须熟悉 sed 命令,因为 sed 命令可以用来解决上述问题。
让我们首先探索 sed 命令,它是 流编辑器的缩写。此命令用于对特定文件执行不同的功能,例如查找、替换、插入等等。
让我们探索一个案例,假设我们有两个目录 d1 和 d2,这两个目录都包含一些文件。
请考虑以下终端输出,以显示这两个目录:
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
广告