学习啦>学习电脑>操作系统>Linux教程>

linux中sed命令字符串替换的用法详解

时间: 佳洲1085 分享

  Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助!

  linux中sed命令字符串替换的用法详解

  sed替换的基本语法为:

  sed 's/原字符串/替换字符串/'

  单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:

  sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号

  命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

  sed 's?原字符串?替换字符串?' //自定义分隔符为问号

  可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:

  sed 's/原字符串/替换字符串/' //替换所有匹配关键字

  上箭头”^”表示行首,美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),这里犯二了,搜了半天哪个符号表示首行,半天才想起来,首行就是数字”1″啊.那么在行首和行尾添加字符串就是把行尾和行首替换,例如:

  sed 's/^/添加的头部&/g' //在所有行首添加

  sed 's/$/&添加的尾部/g' //在所有行末添加

  sed '2s/原字符串/替换字符串/g' //替换第2行

  sed '$s/原字符串/替换字符串/g' //替换最后一行

  sed '2,5s/原字符串/替换字符串/g' //替换2到5行

  sed '2,$s/原字符串/替换字符串/g' //替换2到最后一行

  替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如:

  sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' //同时执行两个替换规则

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

  sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项

  linux中sed命令批量替换字符串操作

  使用sed命令可以进行字符串的批量替换操作,以节省大量的时间及人力;

  使用的格式如下:

  sed -i "s/oldstring/newstring/g" `grep oldstring -rl path

  其中,oldstring是待被替换的字符串,newstring是待替换oldstring的新字符串,grep操作主要是按照所给的路径查找oldstring,path是所替换文件的路径;

  -i选项是直接在文件中替换,不在终端输出;

  -r选项是所给的path中的目录递归查找;

  -l选项是输出所有匹配到oldstring的文件;

  实例:

  1. 替换指定文件的字符串

  sed -i "s/oldstring/newstring/g" filename

  sed -i "s/6/sk/g" ./test01.txt

  2. 字符串替换批量文件操作

  sed -i "s/6/sk/g" ·grep 6 -rl /home/work/test`

  sed -i "s/6/sk/g" ·grep 6 -rl /home/work/test/*.sh`

  可将test目录下的所有相关文件都进行字符串替换

  补充:Linux中sed命令使用时的小技巧

  在sed的命令行中引用Shell变量时要使用双引号,而不是通常所用的单引号。下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本:

  name='zone "localhost"'

  sed "/$name/,/};/d" named.conf

  sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

  例如:替换/home下所有文件中的www.itbbs.cn为chinafar.com

  # sed -i “s/www.itbbs.cn/chinafar.com/g” `grep www.itbbs.cn -rl /home`

3645328