博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sed
阅读量:6041 次
发布时间:2019-06-20

本文共 3447 字,大约阅读时间需要 11 分钟。

hot3.png

sed工具介绍(替换、及替换指定的字符)

sed介绍:sed工具主要是替换的文本输出到屏幕上,而且还有其他更丰富的功能。

sed命令格式:sed -n 'n' p filename,单引号内的n是一个数字,表示几行。
-n选项的作用就是只显示我们要打印的行,无关紧要的内容不显示。

创建一个sed目录,把passwd文件拷贝进来,方便后面学习。

[root@localhost ~]# mkdir sed #创建一个目录[root@localhost ~]# cd sed/ #进入到目录sed[root@localhost sed]# cp /etc/passwd test.txt #拷贝passwd文件到本目录下,并且修改名字[root@localhost sed]# ls #查看当前目录下都有哪些文件test.txt[root@localhost sed]# pwd #当前所在的位置/root/sed

只显示我们需要查找的内容显示出来,示例如下:-n

[root@localhost sed]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin#-n选项是指显示我们要打印的行。

在grep中使用的特殊字符如(^ $ *等) 都可以在sed中使用。

指定一个区间打印, 比如指定一个区域2-3行,示例如下:-n

[root@localhost sed]# sed -n '2,3'p test.txt bin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin

sed命令加上-e选项可以实现多个行为,示例如下:-e

[root@localhost sed]# sed -e '1'p -e '/bus/'p -n test.txt root:x:0:0:root:/root:/bin/bashdbus:x:81:81:System message bus:/:/sbin/nologin#sed -e 实现多个行为,如我查找第一行,并且 把文档中含有bus的显示出来

如果需求说查找一个文件,把bus不管大小写都列出来,I

[root@localhost sed]# sed -n '/bus/'Ip test.txt  #这里一定要加一个大I字母。dbus:x:81:81:System message bus:/:/sbin/nologinBUS

删除某些行(并非删除),把剩下的行数都显示出来,示例如下:d

[root@localhost sed]# sed '1,18'd test.txt chrony:x:998:996::/var/lib/chrony:/sbin/nologinBUS#这里后面跟选项d,会把1到18行的内容删除,把后面的内容显示出来。

这里参数d表示删除的东西,它不仅可以删除指定的单行以及多行,而且可以删除匹配某个字符的行,还可以删除从某一行开始到文档最后一行的所有行,这个命令仅仅是在屏幕上并不显示这些行。

sed真正删除选中的行数,示例如下:-i

首先先拷贝一份文件过来:[root@localhost sed]# cp test.txt test.txt.bak #拷贝过来个备份[root@localhost sed]# ls #查看当前目录下的文件test.txt  test.txt.bak[root@localhost sed]# wc -l test.txt #wc查看一个文件有多少行20 test.txt[root@localhost sed]# sed -i '1,18'd test.txt #-i删除1到18行。[root@localhost sed]# wc -l test.txt #再来看这个文件有多少行。2 test.txt

-i还可以指定删除某个字符的行,示例如下://

[root@localhost sed]# sed '/root/'d  test.txtchrony:x:998:996::/var/lib/chrony:/sbin/nologinBUS

全局指定替换1,10行。 s

[root@localhost sed]# sed '1,10s/root/toor/g' test.txt #1,10是范围,后面跟s是替换,/root/替换成/toor/,g表示全局替换。toor:x:0:0:toor:/toor:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

上述中的参数s就表示替换的动作,参数g表示本行全局替换,如果不加g只会替换本行出现的第一个。

调整两个字符串的位置,示例如下: -r

第一段和最后一段替换位置

[root@localhost sed]# head test.txt | sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:1/'/bin/bash:x:0:0:root:/root:1/sbin/nologin:x:1:1:bin:/bin:1/sbin/nologin:x:2:2:daemon:/sbin:1/sbin/nologin:x:3:4:adm:/var/adm:1/sbin/nologin:x:4:7:lp:/var/spool/lpd:1/bin/sync:x:5:0:sync:/sbin:1/sbin/shutdown:x:6:0:shutdown:/sbin:1/sbin/halt:x:7:0:halt:/sbin:1/sbin/nologin:x:8:12:mail:/var/spool/mail:1/sbin/nologin:x:11:0:operator:/root:1

小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则携程类似\1、\2或\3的形式,上列中()把想要替换的字符打包成了一个整体,有这个转义字符\,-r选项让这个表达式更加清晰了。

查看一个文档当中,所有的数字不包含字符。

[root@localhost sed]# head test.txt |sed 's/[a-zA-Z]//g' #这里括号里的是范围::0:0::/://::1:1::/://::2:2::/://::3:4:://://::4:7::///://::5:0::/://::6:0::/://::7:0::/://::8:12::///://::11:0::/://

如果给文档前面统一添加个字符串,比如aaa,示例如下:

[root@localhost sed]# head test.txt | sed -r 's/(.*)/aaa:&/' #&表示星号前所有aaa:root:x:0:0:root:/root:/bin/bashaaa:bin:x:1:1:bin:/bin:/sbin/nologinaaa:daemon:x:2:2:daemon:/sbin:/sbin/nologinaaa:adm:x:3:4:adm:/var/adm:/sbin/nologinaaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologinaaa:sync:x:5:0:sync:/sbin:/bin/syncaaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdownaaa:halt:x:7:0:halt:/sbin:/sbin/haltaaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologinaaa:operator:x:11:0:operator:/root:/sbin/nologin

转载于:https://my.oschina.net/u/3830571/blog/1800650

你可能感兴趣的文章
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
编译安装nginx 1.9.15
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
frameset分帧问题
查看>>
特殊样式:ime-mode禁汉字,tabindex焦点
查看>>
linux
查看>>
Layout父元素点击不到的解决办法
查看>>