文本三剑客之sed

sed

sed是一种在线编辑器 、行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为“模式空间”接着用sed命令处理缓冲区中的内容把缓冲区的内容送到标准输出。


特点

sed可以进行数据的替换、删除、新增,数据可以是关键字、特定的行。

sed是一种非交互式文本编辑器,vim是一种交互式文本编辑器。

sed是搜索匹配处理文本工具,grep是用来检索条件关键字的。

sed

  -n:不输出模式空间内容到屏幕,即不自动打印

  -e: 多点编辑,对每行处理时,可以有多个Script 

  -f: 把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写

  -r: 支持扩展的正则表达式

  -i: 直接将处理的结果写入文件

-i文件名  在将处理的结果写入文件之前备份一份


地址定界:

(1) 不给地址:对全文进行处理

sed -n 'p' 文件

(2) 单地址:

#: 指定的行

sed -n '2p' 文件

/pattern/:被此处模式所能够匹配到的每一行

sed -n '/linux/p'文件

(3) 地址范围:

#,# 

sed -n '2,3p'

#,+#

sed -n '2,+1p'

/pat1/,/pat2/

sed -n '/redhat/,/linux/p'

#,/pat1/

sed -n '2,/linux/p'

(4) ~:步进

sed -n '1~2p'  只打印奇数行

sed -n '2~2p'  只打印偶数行


编辑命令

d: 删除模式空间匹配的行,并立即启用下一轮循环

sed '2d' pets

p:打印当前模式空间内容,追加到默认输出之后

sed '2p' pets

a [\]text:在指定行后面追加文本,支持使用\n实现多行追加

sed '2a\123\n456\n789' pets

i [\]text:在行前面插入文本

sed '2i\123\n456\n789' pets

c [\]text:替换行为单行或多行文本

sed '2c\123\n456\n789' pets

w /path/somefile: 保存模式匹配的行至指定文件

sed -n '3w /root/3.file' pets

r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后

sed '3r /root/mage.txt' pets

=: 为模式空间中的行打印行号

sed '=' pets.bak 

!:模式空间中匹配行取反处理

sed -n '2!p' pets

s///:查找替换,支持使用其它分隔符,s@@@,s###替换标记:

g: 行内全局替换

sed 's/dog/cat/g' pets


高级命令

sed除了模式空间还有一个保持空间,对于处理过的数据可能还有其他处理,可以先传送至保持空间,然后在后续处理中再次传回模式空间。

sed有一些高级命令运用到保持空间,这些命令大多配合使用,例如以下几种组合:

(!命令取反,分号可以分割脚本)

sed -n 'n;p' FILE  显示偶数行

sed '1!G;h;$!d' FILE  倒序显示

sed -n '1!G;h;$p' 倒序显示

seq 7 |sed 'n;d' 显示奇数

sed  'N;D' 显示最后一行

sed '$!d'  显示最后一行

sed 'G'  每行之间加空行  

sed 'g'  把每行内容替换成空行

sed '/^$/d;G'  确保每一行下面都有一个空行


1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符

cat grub2.cfg |sed -r 's/^[[:space:]]+//'

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

sed -r "/^#[[:space:]]/s/^#[[:space:]]+([^[:space:]])/\1/" fstab

sed -r 's/^#[[:space:]]+//' fstab

3、在centos6系统/root/install.log每一行行首增加#号

sed 's/^/#/g' /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号

cat /etc/fstab |sed  's/^[^#]/#&/'

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

echo /etc/sysconfig/network-scripts/ |sed -r  's#(^/.*/)([^/].*/?$)#a:\1\nb:\2#'

6、利用sed 取出ifconfig命令中本机的IPv4地址

ifconfig eth0 |sed -n '2p' |sed 's#^.*addr:##g' |sed 's#  Bcas.*$##g'

ifconfig eth0 |sed  -n -e  '2s#^.*addr:##g' -e 's#  Bcas.*$##gp'


作业:

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数


ls  /run/media/root/CentOS 7 x86_64/Packages | sed -r 's#.*\.([^\.]+)\.rpm#\1#'|sort|uniq -c

8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)


9、将文本文件的n和n+1行合并为一行,n为奇数行


后两道不会做,后续再修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值