shell之批量修改内容

shell之批量修改内容开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情. 简单记录一下批量修改内容思路

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

学习shell的基础语法.突然,就刚刚.想到一个小功能,怎么批量修改文件名字.以及批量修改文件内容呢.基于这个好奇.也就诞生了这篇文章.记录一下自己的学习心得.

您能在这里看到啥

  1. 怎么实现
  2. 落地方案

怎么实现

很多时候,我们都会去直接找解决方法,忽略了思考能力.反而大大的提升了查找能力.我更倾向于先思考,然后再去查找.

对于批量修改这个问题,突然让我想起了中华小当家里曾经说过一句.如果在你不知所措的时候,就回到你的原点想一想🤔️.好像是很有道理啊.我的原点.脑子突然想到竟然是编译器.对啊.编译器就有这样的功能,如下所示

截屏2022-11-30 20.44.32.png

编译器搜索功能也是我经常用的啊,比如我想全局修改一个属性,就会用到搜索,然后再替换,内容即可.对哦,这样不就直接就是我想要的吗.

  1. 获取文件路径
  2. 获取替换内容
  3. 找到包含替换内容的所有文件路径
  4. 轮询替换内容

从上面初步的整理.基本上已经满足我的需求.下面我们来画一下流程图.这样就方便我们执行落地方案了.

截屏2022-11-30 21.33.46.png

这只是我们的初步方案.如果我想到更好的方案,也会同步更新.暂时我们就先按照这个方案.去落地,说不定在不断的尝试中,就会有更好的方案.这也是我的经验,不怕累.因为笨,所以会不断的试错.

落地方案

  1. 准备测试数据.

在准备测试数据的时候,突然就有了一个新的需求.因为,我是一个一个文件的创建,纯纯的手动创建.并且,这是一个枯燥无味的工作.然后我就想到,为啥我不使用shell脚本创建呢.这样也练练手了.所以下一篇我将会详细的记录一下批量操作.好了回归主题,下面就是我纯纯纯手动创建的测试文件.

截屏2022-11-30 21.30.02.png

截屏2022-11-30 21.30.54.png

每个文件里面的内容区别就在于shell字符的多少.由于我们这里算是测试,基于上面的流程图中的第一步第二步.这里就先不做处理.我们先实现核心功能.然后再去丰富功能.

  1. 获取替换文件的路径

    • 使用findgrep组合获取文件路径

      通过# 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
      

    执行结果,如下所示

    截屏2022-11-30 22.28.54.png

  2. 替换文件内容

    经过上面的查找,剩下的就是替换了.在字符串操作这篇文章里.我们知道,我们是需要替换当前文件里符合要求的字符串.所以,这里我们使用的命令,如下所示.

    语法: ${a/str1/str2}

    最终代码如下所示

    • 使用findgrep组合获取文件路径

          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

查找了资料才知道.unixlinux在使用sed指令是有区别.需要在 -i后面增加一个""即可.

系列文章

参考文章

sed报错

今天的文章shell之批量修改内容分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20867.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注