开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
学习shell的基础语法.突然,就刚刚.想到一个小功能,怎么批量修改文件名字.以及批量修改文件内容呢.基于这个好奇.也就诞生了这篇文章.记录一下自己的学习心得.
您能在这里看到啥
- 怎么实现
- 落地方案
怎么实现
很多时候,我们都会去直接找解决方法,忽略了思考能力.反而大大的提升了查找能力.我更倾向于先思考,然后再去查找.
对于批量修改这个问题,突然让我想起了中华小当家里曾经说过一句.如果在你不知所措的时候,就回到你的原点想一想🤔️.好像是很有道理啊.我的原点.脑子突然想到竟然是编译器.对啊.编译器就有这样的功能,如下所示
编译器的搜索功能也是我经常用的啊,比如我想全局修改一个属性,就会用到搜索,然后再替换,内容即可.对哦,这样不就直接就是我想要的吗.
- 获取文件路径
- 获取替换内容
- 找到包含替换内容的所有文件路径
- 轮询替换内容
从上面初步的整理.基本上已经满足我的需求.下面我们来画一下流程图.这样就方便我们执行落地方案了.
这只是我们的初步方案.如果我想到更好的方案,也会同步更新.暂时我们就先按照这个方案.去落地,说不定在不断的尝试中,就会有更好的方案.这也是我的经验,不怕累.因为笨,所以会不断的试错.
落地方案
- 准备测试数据.
在准备测试数据的时候,突然就有了一个新的需求.因为,我是一个一个文件的创建,纯纯的手动创建.并且,这是一个枯燥无味的工作.然后我就想到,为啥我不使用shell脚本创建呢.这样也练练手了.所以下一篇我将会详细的记录一下批量操作.好了回归主题,下面就是我纯纯纯手动创建的测试文件.
每个文件里面的内容区别就在于shell字符的多少.由于我们这里算是测试,基于上面的流程图中的第一步和第二步.这里就先不做处理.我们先实现核心功能.然后再去丰富功能.
-
获取替换文件的路径
-
使用
find
和grep
组合获取文件路径通过# shell 通用命令之find这篇文章里,我们已经知道,如果你想寻找特定的后缀文件.我们需要使用
find . -name "*.文件后缀"
,当然如果你想对文件进行内容读取,也是少不了获取文件权限的.哈哈,是不是之前学习的东西,都是有用的呢,下面我们看一下代码# 第一步获取我们想要的并且可以执行读写权限的文件 find . -name "*.txt" -print0 | while IFS= read -r -d '' file; do # 第二步就是筛选出,包含目标内容的文件 # 之前的文章也是学习了怎么判断命令执行是否成功判断 # 到这里,我们也是使用上了. if grep "shell" "$file"; then # 第三步,输出包含目标文件的详细信息. echo "$file" fi done
-
使用
grep
获取文件路径由于对grep只是会用,这里我就直接上代码,后续也会好好学习一下.当然这代码也是我自己写的.
grep -rn "shell" . | while IFS= read -r file; do echo "$file" done
执行结果,如下所示
-
-
替换文件内容
经过上面的查找,剩下的就是替换了.在字符串操作这篇文章里.我们知道,我们是需要替换当前文件里符合要求的字符串.所以,这里我们使用的命令,如下所示.
语法:
${a/str1/str2}
最终代码如下所示
-
使用
find
和grep
组合获取文件路径find "$project_path" -name "*.txt" -print0 | while IFS= read -r -d '' file; do if grep "shell" "$file"; then sed -i "" "s/shell/tt/g" "$file" fi done
-
使用
grep
获取文件路径grep -rn "tt" . | while IFS= read -r file; do sed -i "" "s/tt/shell" "$file" done
这样就简单的完成了修改内容.
-
一些细节
在使用sed指令,发现了一个小细节,由于我的是mac电脑.我一开始使用的指令格式如下所示
sed -i "s/tt/shell" "$file"
然后就报错了.报错内容如下所示
# extra characters at the end of comman
查找了资料才知道.unix和linux在使用sed指令是有区别.需要在 -i
后面增加一个""
即可.
系列文章
参考文章
今天的文章shell之批量修改内容分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20867.html