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 11:22
下一篇 2017-12-03 14:59

相关推荐

  • Btrfs文件系统的管理和应用

        Btrfs(我们称之为Butter FS或者B-tree FS)被称为新一代的linux文件系统。一直以来,EXT文件系统以其卓越的稳定性成为linux标准的文件系统。但近年来,EXT3暴露出一些扩展性的问题(如单一文件大小限制、总文件系统大小限制等),于是便催生了EXT4。但同时,Btrfs向人们展现出诸多优…

    Linux干货 2016-02-14
  • 作业–权限管理

    1、当用户wangcai对/testdir目录无写权限时,该目录下的只读文件file1是否可修改和删除? [root@liang testdir]# su wangcai [wangcai@liang testdir]$ ll -a 总用量 8 drwxr-xr-x. &nbsp…

    Linux干货 2016-08-05
  • 第一周学习总结

    俗话说,好记性不如烂笔头,在当今移动互联网横行的时代,烂笔头就是网络,而笔记本就是各种平台。 作为一个IT人,有人突然问你计算机是啥,你可能不会像学文科的人一样给他说,就是电脑啊。这时候就是凸显IT知识技能的时候了,那么我下面就给您慢慢的道来。 在1946年美籍匈牙利人冯·诺依曼首次提出了自己的计算机体系理论,简称冯·诺依曼体系,主要是说计算机由五大基本部件…

    2017-12-14
  • Linux学习 Grep详则。

    grep 功能说明:查找文件里符合条件的字符串。 语  法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录&…

    Linux干货 2017-07-24
  • 计划任务管理

        Linux系统计划任务有两种:A、一次性任务;B、定时循环任务。     一次性任务:at命令。at的安装包名字就是at,可以使用命令"yum install at"进行安装.安装完成后,启用atd服务就可以运行at命令了.运行格式为:at [opti…

    Linux干货 2016-11-27
  • 书写博客的作用

    博客,一个对于我们是一个既贴近又遥远的词汇。在我们生活中常常听到这个词汇,但是很大的一部分人并不会去发布属于自己的博客。而我在这里会发表一些对于博客作用的认识,以供大家借鉴。

    2018-03-26