Shell 递归修改文件(Mac+win)

问题背景: 集群间通过导入导出来批量迁移脚本及作业调度配置时, 由于两集群之间某个参数名称发生改变, 故需要统一对导出的文件进行递归修改文件中发生改变的参数名称, 如此再导入到新集群中, 方才能正常运行.

处理方式: 使用 shell 递归修改

➜  ~ cd /Users/dooo/Downloads/work/shell
➜  shell cat recursiveReplaceField.sh
#! /bin/zsh
function read_dir(){
for file in `ls $1`
do
 if [ -d $1"/"$file ] 
 then
 read_dir $1"/"$file
 else
 sed -i '' 's/aaa/bbb/g' $1"/"$file 
 echo $1"/"$file 
 fi
done
}
read_dir $1

运行命令: ./recursiveReplaceField.sh 文件路径


因工作时 window 与 Mac 两台切换使用. shell 现在 win notepad++ 中完成并测试成功.

然后在 Mac 中重新使用时, 遇到两个报错:

  1. 由于 dos | unix 换行格式不同, 导致执行 shell 报错

报错信息: /bin/zsh^M: bad interpreter: No such file or directory

产生原因: win (dos) 每行结尾以 \r\n 来标识, Mac或者linux (unix) 每行结尾以 \n 来标识.

查看方式: vi filename, 进入命令行模式执行set ff, 执行结果 fileformat = dos 或者 unix .

修改方式: vi filename, 进入命令行模式执行set ff=unix, 然后保存退出即可.

  1. 由于 Mac | linux 中 sed -i 命令存在区别导致报错

报错信息: extra characters at the end of command

修改方式: Mac 中在 -i 后添加空格 ""

sed -i "" "s/aaa/bbb/g" *.txt
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值