如何使用 shell 脚本或 Linux 查找并替换当前目录中多个文件的内容?

如何使用 shell 脚本或 Linux 查找并替换当前目录中多个文件的内容?

我的当前文件夹名称为,当前文件夹包含诸如、等details1文件列表...file1file2file3

示例:(这里我只显示了 ,file1其他文件也将包含与 相同的内容file1。)

file1:cat file1

 href="/de_hecklist/secry/GD/GD10/"

 href="/de_hecklist/secry/GT/GT1/"

我的查询:

如何使用查找和替换当前目录下的多个文件(即file1file2等等file3),一次替换而不打开每个文件。

我尝试过以下操作:(这是通过打开每个文件来应用的)

:%s/de_hecklist/data/g

:%s/secry/send/g

对于当前目录下的多个文件,例外的输出应如下所示:

href="/data/send/GD/GD10/"

href="/data/send/GT/GT1/"

答案1

如果这一行给出正确的输出

 sed -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1

in-place然后你可以改变内容-i

 sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1

要对所有匹配的文件执行此操作,file?您可以

find . -name 'file?' -type f -exec sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' {} \;

您还可以将sed所有文件作为参数。首先创建一个命令,给出所有完整路径文件名:

find . -name 'file?' -type f

然后将其添加到sed

sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' $(find . -name 'file?' -type f) 

答案2

尝试这个:

find -maxdepth 1 -type f -name "file?" -exec sed -i.bak -e 's/de_hecklist/data/g; s/secry/send/g' {} +

您可以替换-name "file?"为与您的文件匹配的任何模式,或者完全删除它以编辑所有文件。

指示不进入子目录,因此仅更改当前目录中匹配-maxdepth 1find文件。file?

-i.bak中的选项可sed对文件进行备份。如果不需要备份,可以将其删除。另请注意,此-i( --in-place) 选项是 GNUsed扩展,因此不符合 POSIX 标准,但由于您使用 Linux,因此这不会成为问题。

相关内容