“ 开发人员有时会大批量替换文件内容,sed命令是一个很好用的工具。”
01
—
暴力替换方式
近期有个临时任务,将系统中所有"帐"替换为"账",那"帐"和"账"有啥区别呢;
1、账的部首是贝;帐的部首是巾。
2、账是关于货币、货物出入zhi的记载;帐是由布制成的遮拦物。
3、用途:账是用在金钱方面的字眼,例如账簿,账目等;帐是用在遮挡物中,例如蚊帐,帐钩等。
4、来历:账原始时代贝壳是代金钱单位,账和金钱相关,所以部首是贝;帐出于《释名》。
大家看完后大概知道为什么要做替换了吧,
核心系统所有"帐"替换为"账" 核心系统将 帐 更新为 账_测试案例
要替换的程序文件涉及上千个,一个一个打开文件进行修改耗时又费力;
执行如下命令进行替换:
sed -i "s/帐/账/g" `grep -rl "帐" ` ./
替换完后查看
find . -name "*.*|xargs grep "帐"
已经没有 "帐"字了
但是这种方式替换有个问题,有点暴力,指定目录下所有文件都会被替换,包括隐藏文件,如果环境中配置有SVN,
会发现替换完的文件没有版本差异,版本也无法提交。
所以如果环境中配有SVN千万不要用这种方式进行替换
切记 不要将.svn隐藏目录替换了,指定要替换的文件目录和文件类型进行替换
02
—
安全替换方式
以下命令可以避免上面的问题:
find . -name "*.SQC" |xargs sed -i "s/帐/账/g"
find . -name "*.ccc" |xargs sed -i "s/帐/账/g"
find . -name "*.c" |xargs sed -i "s/帐/账/g"
find . -name "*.h" |xargs sed -i "s/帐/账/g"
若涉及表的替换:可以用如下命令:
--select * from pubrspcode where tbdesc = '%帐%';
update pubrspcode set tbdesc = replace(tbdesc,'帐','账') where tbdesc = '%帐%';
commit;