热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

➜ ~ cd /Users/dooo/Downloads/work/shell
➜ shell cat recursiveReplaceField.sh
#! /bin/zsh
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 中重新使用时, 遇到两个报错:

  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


推荐阅读
author-avatar
吕贞吟明辉碧瑜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有