问题背景: 集群间通过导入导出来批量迁移脚本及作业调度配置时, 由于两集群之间某个参数名称发生改变, 故需要统一对导出的文件进行递归修改文件中发生改变的参数名称, 如此再导入到新集群中, 方才能正常运行.
处理方式: 使用 shell 递归修改
➜ ~ cd /Users/dooo/Downloads/work/shell
➜ shell cat recursiveReplaceField.sh
function read_dir(){
for file in `ls $1`
doif [ -d $1"/"$file ] thenread_dir $1"/"$fileelsesed -i '' 's/aaa/bbb/g' $1"/"$file echo $1"/"$file fi
done
}
read_dir $1
运行命令: ./recursiveReplaceField.sh 文件路径
因工作时 window 与 Mac 两台切换使用. shell 现在 win notepad++ 中完成并测试成功.
然后在 Mac 中重新使用时, 遇到两个报错:
- 由于 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
, 然后保存退出即可.
- 由于 Mac | linux 中
sed -i
命令存在区别导致报错
报错信息: extra characters at the end of command
修改方式: Mac 中在 -i 后添加空格 ""
sed -i "" "s/aaa/bbb/g" *.txt