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

2018-12-20  本文已影响12人  kaizhi

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/

上一篇下一篇

猜你喜欢

热点阅读