sed

Stream EDitor, 行编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前 处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环 。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空 模式空间,但不会清空保留空间。这样不断重复,直到文件末 尾。文件内容并没有改变,除非你使用重定向存储输出。
功能:主要用来自动编辑一个或多个文件,简化对文件的反复 操作,编写转换程序等
参考: http://www.gnu.org/software/sed/manual/sed.html

用法:
sed [option]… ‘script’ inputfile…
常用选项:
-n:不输出模式空间内容到屏幕,即不自动打印
-e: 多点编辑
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i.bak: 备份文件并原处编辑
script:
‘地址(文件行数)命令’
地址定界:
(1) 默认不给地址:对全文进行处理
(2) 单地址: #: 指定的行,$:最后一行 /pattern/(模式匹配):被此处模式所能够匹配到的每一行
(3) 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步进 1~2 奇数行 2~2 偶数行
#sed “2p” /etc/issue
打印第二行两遍
sed01
#sed -n “2p” /etc/issue
只打印第二行
sed02
#cat -n /etc/passwd|sed -n “1,3p”
只打印1,3行
sed03
#cat -n /etc/passwd|sed “1,10d”
删除1-10行、
04sed
#cat -n /etc/passwd|sed -n ‘$p’
打印最后一行
sed05
#cat -n /etc/passwd |sed -n “1,+4p”
打印1+4行
sed
06
#sed -n ‘/^r/,/^a/p’ /etc/passwd
打印从 r开头到a开头的之间的所用行 注意:sed命令会把文件里所有符合r开头的行到后面所有的行都会打印一遍
07sed
#cat -n /etc/passwd|sed ‘2~2d’
用到的命令:(d)删除
删除偶数行
sed08
#cat -n /etc/passwd |sed -n “1~2p”
只打印奇数行
打印偶数行
用到高级用法:n
#cat -n /etc/passwd |sed -n ‘n;p’
09
sed
#sed “9a\ ailas cdent=’cd /etc/sysconfig/netwark-scripts/”
在~/。bashrc文件的第九行添加别名ailas cdent=’cd /etc/sysconfig/netwark-scripts/”
10
sed
注意:以上内容都只是在屏幕上打印出来了文件并没有真正被改掉
#sed -i.bak “9a\ailas cdent=’cd /etc/sysconfig/netwark-scripts/” ~/.bashrc
加上-i.bak 之后会默认在家目录里创建一个与源文件一样的文件但是会加-i 后面的字符为文件后缀例如这张图上-i后面有个.bak那么这个就是这个文件的后缀,而后面的 “9a\ a是表示在第九行后面 插入一行
sed11
这回是真正改了文件了 ,所以 -i 选项用起来一定要谨慎
sed12
#sed “/^# Source/ixxxxx” ~/.bashrc
在上一行添加内容:i
13
在~/.bashrc 的# Source 的这一行的上一行添加一行字符 (//)这个表示模式。在这个模式可以使用正则表达式 那么我这里表示的是# Source的行的上一行添加字符,那么这里的(i)的作用就是在上一行添加字符 ,当然这只是显示并没有真正改文件
sed#sed ‘/^SELINUX=/c SELINUX=disabled’ /etc/selinux/config
替换内容 :c
替换SELINUX=这一行的内容
sed14
被改后的文件
sed15
读入文件内容
用到命令:r
#sed “/^root/r /etc/issue” /etc/passwd
r 的功能就是读取文件内容添加到指定行的下一行,注意:r 读取的内容会添加到所有匹配的行下面,也就是说如果这个文件里有10root开头的行,那么每一行下面都会有被读取文件的内容
sed16
打印匹配到的字符的行号
#sed “/^alias/=” ~/.bashrc
用到的命令:=
sed17
打印除了以alias开头的其他行
用到的命令 : !
注意:这里不能用双引号,因为双引号能识别里面的特殊字符,这里面的!号就被识别成了调用上一条命令
sed
把文件中想过滤出来的内容指定一个文件中
#sed ‘/^alias/w /app/.bashrc.bak‘ ~/.bashrc
用到的命令:w
这里的w功能是把~/.bashrc文件中的所有以alias开头的行存放到/app/下的.bashrc.bak这个文档里
sed17
/app/.bashrc.bak内容
sed20
打印以某个字符串结尾的行
#sed -n ‘/bash$/p’ /etc/passwd
用到的命令:-n ,p
打印/etc/passwd 文件里的所有以bash结尾的行
sed22

重难点
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
搜索替代:
用到命令:s///,(@@@,###)这些符号都可以作为分隔符
错误做法
sed ‘s@/bin/bash$@/sbin/nolongin$@’ /etc/passwd (错误)
23
注意第一个之第二个@之间代表正则表达式也是搜索内容,第二个到地三个@之间代表字符串也就是替代内容,这里错就错在/sbin/nolongin后面带了一个$导致内容替换之后多了一个$
sed
正确做法
#sed ‘s@/bin/bash$@/sbin/nolongin@’ /etc/passwd
sed24
分组正则表达式,以及后向引用
#sed -r ‘s@(/bin/bash$)@###\1$$$$@’ /etc/passwd
前面@(/bin/bash$)@是把(/bin/bash$)作为一个分组 而后面@###\1$$$$@中间的这个\1表示后项引用 前面的 /bin/bash作为内容 而###\1表示在/bin/bash前面加上###,\1$$$就表示在/bin/bash后面添加$$$
25
sed
替换etc/selinux/config文件中的SELINUX=enforcing
#sed -r ‘s@(^SELINUX=)enforcing@\1disabled@’ /etc/selinux/config
把(^SELINUX=)作为一个分组,后面的 enforcing就是不要的内容,而这个\1就是调用前面的分组的内容(^SELINUX=),那么\1后面的disabled就是在SELINUX=后面添加的内容
结果就会是SELINUX=disabled 把之前的 enforcing给覆盖了
sed26
取centos6.ip地址
#ifconfig eth0|sed -n ‘2p’|sed -r ‘s@.*inet addr:(.*) Bcast.*@\1@’
sed27
#ifconfig eth0|sed -nr ‘2p;s@.*inet addr:(.*) Bcast.*@\1@p’
这条命令是把两条命令合并成一条了
sed28
替换GRUB_DISABLE_RECOVERY=”true” 把true替换成false
原来的状态
sed29
#cat /etc/default/grub |sed -r ‘s/(GRUB_DISABLE_RECOVERY=”)true”/\1false”/’
sed30
去版本号
①。#cat /etc/centos-release|sed -nr ‘s@.*release (…).*@\1@p’
②。#cat /etc/centos-release|sed -nr ‘s@.*release ([^.]..).*@\1@p’
③。#cat /etc/centos-release|sed -nr ‘s@.*release ([^.]).*@\1@p’
31
sed
取目名
#echo “/etc/sysconfig/network-scripts/ifcfg-ens33″|sed -r ‘s@(^/.*/)(.+)/?@\1@’
(目录名) (基名)(搜索替代后向引用1)(^/.*/)
取基名
#echo “/etc/sysconfig/network-scripts/ifcfg-ens33″|sed -r ‘s@(^/.*/)(.+)/?@\2@’
(搜索替代后向引用2)(.+)/?
sed32
替换多个内容
用到命令:-e (多点编辑)
sed33
第一个-e ‘s/#Name/Name/ 意思是搜索#NameVirtualHost*:80这一行替换成NameVirtualHost*:80
第二个 -e 表示的是以#<VirtualHost开头的行到</VirtualHost>开头的行搜索#替换为空
(模式①) 到 (模式②) 搜索#替换为空
sed

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89389

(0)
xiaoli@xiaoli@
上一篇 2017-12-03
下一篇 2017-12-03

相关推荐

  • 姗姗来迟的第三周作业

    一,列出当前系统上所有已经登录的用户的用户名,注意,同一个用户登录多次只显示一次即可 w -h | cut -d" " -f1 | uniq who |cut -d" " -f1|uniq 二,取出最…

    Linux干货 2016-11-21
  • N21_第8周_网络

    N21_第8周_网络 作业题目: 1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥:(Bridge)也称桥接器,是连接两个局域网的存储转发设备,用它可以完成具有相同或相似体系结构网络系统的连接。       &nbs…

    Linux干货 2016-10-09
  • keepalived双主模型高可用Nginx服务

    配置前提: (1) 各节点时间必须同步;             ntp, chrony (2) 确保iptables及selinux不会成为阻碍; (3) 各节点之间可通过主机名互相通信(对KA并非必须);   &nb…

    2017-07-06
  • linux 系统基础(三)–用户和组命令使用总结

    1、列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@node2 ~]# who   root     pts/0        2016-10-…

    Linux干货 2016-10-08
  • 权限(用户、特殊、ACL)

    root权限(id=0) root无论在什么情况下都有rw权限,但是是否拥有x权限,要分情况: 第一,文件所有者和所属组都无x权限,root也无x权限; 第二,文件所有者和所属组二者任何一个有x权限,root就有x权限。 用户得到的权限 匹配顺序:文件所有者——文件所属组——其他人(从左到右) 用户访问文件,一旦按次序匹配成功,其获得的权限就是匹配选项所对应…

    Linux干货 2017-05-30
  • 文本查看类命令

    文本查看相关的命令:1.  cat – 串连文件,并以标准输出显示语法:cat [OPTION]… [FILE]… 常用选项 选项 | 含义—— | ——-n | 在显示文件内容时打印行号示例:~]# cat -n /etc/rc.d/init.d/functions显示/e…

    2017-09-07