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