我有一个文件夹“model”。在其中,我需要将术语“Test_Dbv3”的所有实例替换为“TestDbv3”。有多个文件,其名称如 test_host.hbm.xml、test_host2.hbm.xml、testHost.java、testHost2.java 等。有什么办法可以使用 Unix 命令或任何语言的脚本来做到这一点吗?
我正在使用 RHEL5。
最佳答案
sed
在就地模式下与 find
一起应该可以工作:
find . -type f -exec sed -e 's/Test_Dbv3/TestDbv3/g' -i.bak '{}' +
恰本地命名的find
命令可以查找文件。在这里,我们在当前工作目录 (.
) 中查找文件 (-type f
)。使用这些文件,我们将-exec
命令:sed
。 +
表示命令结束,我们希望将 {}
替换为操作系统允许的尽可能多的文件。
sed
将逐文件、逐行执行我们指定的命令。我们给它的命令是 s/Test_Dbv3/TestDbv3/g
,它翻译为“将正则表达式 Test_Dbv3
与文本 TestDbv3
进行替换匹配” code>,允许每行多次替换”。 -i.bak
表示用结果替换原始文件,保存未修改的版本,文件名后缀为.bak
。
关于string - 用于替换文件夹中每个文件中字符串的所有实例的 Unix 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119685/