Ubuntu系统使用sed命令替换字符串的常用语法

2018年05月30日 99 字 教程整理


sed替换的基本语法为:

sed 's/<原待替换字符串>/<替换目标字符串>/'

在上一段代码规则中:单引号内部,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线 \ 进行转义。但是单引号 ' 是不能用反斜线 \ 转义的,这中签情况需要把命令中的单引号改为双引号,即: sed "s/<原待替换字符串>/<替换目标字符串>/"

命令中的斜线分隔符可以换成其他的符号,只需要紧跟s定义即可,例如换成问号 ? : sed 's?<原待替换字符串>?<替换目标字符串>?' ,效果是一样的。

基本语法默认只替换每行的第一个匹配的关键字。

更复杂的语法可以在此基础上加以调整:

0.1. 替换全部匹配的关键字

基本语法 g 可以替换字符串中每一个匹配的关键字:

sed 's/<原待替换字符串>/<替换目标字符串>/g'

0.2. 指定替换范围(行数范围)

这里有几个特殊符号,可以用于选定命令指代的行数范围:

  • 上箭头 ^ : 表示行首;
  • 美元符号 $ : 如果在引号中表示行尾,但是在引号外却表示末行(最后一行);
  • 数字: 指定一个数字,数字就代表对应的范围行数。

0.2.1. 替换指定行数范围内容

sed '2s/<原待替换字符串>/<替换目标字符串>/g'     //替换第2行 (全局替换)
sed '$s/<原待替换字符串>/<替换目标字符串>/g'     //替换最后一行 (全局替换)
sed '2,5s/<原待替换字符串>/<替换目标字符串>/g'     //替换2到5行 (全局替换)
sed '2,$s/<原待替换字符串>/<替换目标字符串>/g'     //替换2到最后一行 (全局替换)

0.2.2. 在指定行首/尾添加内容

添加命令默认是添加在行首。如需添加到行位,要用 & 字符标记在添加内容之前。

sed 's/^/<待添加的目标字符串>&/g'         //在所有行首添加
sed 's/$/&<待添加的目标字符串>/g'         //在所有行末添加

0.3. 保存替换输出结果或编辑文件内字符

sed处理过的输出是直接输出到屏幕上的,如果需要保存可以将输出重定向,或者使用参数 i 直接在文件中替换:

sed -i 's/<原待替换字符串>/<替换目标字符串>/g' <需替换内容的文件名> 
//替换文件中的所有匹配项