sed是stream editor缩写,表示流编辑器,它是一款文本处理工具,可以配合正则表达式进行文本替换。
1、使用正则表达式匹配并进行文本中的字符串替换
*使用-i选项可以直接将替换结果应用到源文件而不用重定向到其他新文本。
*sed 's/pattern/replace_string/' file.txt会将文本中第一次出现的pattern替换为replace_string。若要对全文本应用次替换,需要在命令尾部加上g参数,即sed 's/pattern/replace_string/g' file.txt,若要从第N次开始替换,可以使用Ng即为,即sed 's/pattern/replace_string/Ng' file.txt。如:
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/4g'
patternpatternpatternPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/3g'
patternpatternPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/2g'
patternPATTERNPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's/pattern/PATTERN/g'
PATTERNPATTERNPATTERNPATTERN

*字符/在sed中作为定界符使用,但是我们可以使用任意的定界符(如果所使用的定界符出现在所要匹配的样式内部,则需要用\进行转义),如下:

[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's#pattern#PATTERN#g'
PATTERNPATTERNPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's*pattern*PATTERN*g'
PATTERNPATTERNPATTERNPATTERN
[root@RHEL-6 ~]# echo "patternpatternpatternpattern" | sed 's^pattern^PATTERN^g'
PATTERNPATTERNPATTERNPATTERN
2、常用技巧:
#移除空白行:sed '/^$/d' file.txt (/pattern/d会移除匹配样式的行,在空白行中,行尾标记紧随着行首标记)
[root@CentOS-6 testdir]# cat test
max
maxtrix
010-12345678 IPADDR: 192.168.0.1
0.0.0.0
[root@CentOS-6 testdir]# sed '/^$/d' test
max
maxtrix
010-12345678
IPADDR: 192.168.0.1
0.0.0.0
[root@CentOS-6 testdir]#

#已匹配字符串标记&:在sed中,用&标记被匹配的字符串,可在替换字符串时使用:

[root@CentOS-6 testdir]# echo "this is test" | sed 's/\w\+/[&]/g'
[this] [is] [test]

#子串匹配标记\1、\2等:&代表匹配给定样式的字符串,但是sed可以匹配给定样式的其中一部分,如:

[root@CentOS-6 testdir]# echo "hao ni" | sed 's/\([a-z]\+\) \([a-z]\+\)/\2 \1/'
ni hao
[root@CentOS-6 testdir]# echo "I am number 7" | sed 's/number \([0-9]\)/\1/'
I am 7

第一个例子中,使用相同的样式分别匹配了hao(子串1,表示为\1)和ni(子串2,表示为\2),在替换的时候两个匹配的子串调换位置,所以结果为“ni hao”,第二个例子中。number [0-9]匹配了number 7,其中7为匹配字符串,是第一个子串,替换中为\1即将number 7替换为第一个子串

#组合多个表达式:多个替换可以用管道符来处理,也可以在同一个sed命令中用“;”分隔,如下:

[root@CentOS-6 testdir]# echo "nice too meet you" | sed 's/n/N/' | sed 's/too/to/'
Nice to meet you
[root@CentOS-6 testdir]# echo "nice too meet you" | sed 's/n/N/;s/too/to/'
Nice to meet you

#引用:sed表达式通常用单引号来引用,不过也可以使用双引号。双引号会通过对表达式求值来进行扩展。当我们想在表达式中使用一些变量字符串时,双引号就有用武之地了:

[root@CentOS-6 testdir]# ojb=LYNUX
[root@CentOS-6 testdir]# echo "hello lynux" | sed "s/lynux/$obj/"
hello LYNUX

最新文章

  1. spring mvc生成注册验证码
  2. oracle迁移postgres之-Ora2Pg
  3. tomcat 解决端口8080冲突
  4. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
  5. netty概念
  6. 【Todo】Nginx架构学习
  7. Atomikos 中文说明文档【转】
  8. 将vs2012建的项目转换为vs2010项目
  9. [深入React] 8.refs
  10. 关于android 双击事件
  11. .net MVC AutoFac基地的环境建设
  12. javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)
  13. Docker 网络命令
  14. 遭遇ASP.NET的Request is not available in this context
  15. 获取子元素节点(children,childNodes)
  16. d2-admin中那些不错的技巧
  17. Mac idea 执行testng用例,提示%MODULE_WORKING_DIR%目录不存在解决办法
  18. requirejs初体验
  19. [SCOI2007]组队
  20. [转]JVM性能调优监控工具

热门文章

  1. css之页面三列布局
  2. 广东地区电信官方DNS服务器
  3. 关于搭建一个高性能网站的服务器的架设思路以及nginx测试的并发
  4. [转]在WPF中区别TextBlock和Label
  5. 更新lispbox中的ccl和slime版本
  6. Java Web 环境搭建步骤(超详细,包括前期安装步骤)
  7. 谈谈springMVC和Strut2的理解
  8. sed 命令使用
  9. JAVA异常初步
  10. deeplab hole algorithm