我的当前文件夹名称为,当前文件夹包含诸如、等details1
文件列表...file1
file2
file3
示例:(这里我只显示了 ,file1
其他文件也将包含与 相同的内容file1
。)
file1:cat file1
href="/de_hecklist/secry/GD/GD10/"
href="/de_hecklist/secry/GT/GT1/"
我的查询:
如何使用查找和替换当前目录下的多个文件(即file1
,file2
等等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 1
的find
文件。file?
-i.bak
中的选项可sed
对文件进行备份。如果不需要备份,可以将其删除。另请注意,此-i
( --in-place
) 选项是 GNUsed
扩展,因此不符合 POSIX 标准,但由于您使用 Linux,因此这不会成为问题。