美文网首页
Linux命令之sed批量替换字符串操作

Linux命令之sed批量替换字符串操作

作者: kaizhi | 来源:发表于2018-12-20 16:15 被阅读12次

    Linux中sed命令功能强大,本文将详细介绍如何使用sed命令进行字符串替换。
    一、基本的替换
    命令格式1:sed 's/原字符串/新字符串/' 文件
    命令格式2:sed 's/原字符串/新字符串/g' 文件
    这两种命令格式的区别在于是否有个“g”。没有“g”表示只替换第一个匹配到的字符串,有“g”表示替换所有能匹配到的字符串,“g”可以认为是“global”(全局的)的缩写,没有“全局的”结尾就不要替换全部,这样就好记啦。命令可以使用正则表达式来处理。如下图,第一个命令只是将第一个“b”替换成了“B”,其他的都没有替换;而第二个命令将全文中的数字都替换成了“好的”。


    image.png
    image.png

    二、保存替换结果到文件中
    命令格式:sed -i 命令
    上述这些命令都只是将替换结果打印到屏幕上,如果想保存结果到文件中,就需要加上“-i”参数。
    另外,在mac环境下使用,sed -i需要带一个字符串作为备份源文件的文件名称,如果这个字符串长度为0,则不备份。

    sed -i "_bak" "s/a/b/g" "example.txt"
    

    实际使用场景:
    将java代码中的日志由common-logging替换成slf4j

    #!/bin/bash
    SED="/usr/bin/sed"
    for file in $(find . -name '*.java'); do
      echo $file
      $SED -i "" 's/^\(.*\) \(Log\)\(.*\)\(LogFactory\.getLog\)\(.*\)$/\1 Logger \3LoggerFactory.getLogger\5/' "${file}"
      $SED -i "" 's/import org.apache.commons.logging.Log;/import org.slf4j.Logger;/g' "${file}"
      $SED -i "" 's/import org.apache.commons.logging.LogFactory;/import org.slf4j.LoggerFactory;/g' "${file}"
    done
    

    附赠一个验证正则表达式的网站:
    https://regexper.com/

    相关文章

      网友评论

          本文标题:Linux命令之sed批量替换字符串操作

          本文链接:https://www.haomeiwen.com/subject/cgiykqtx.html