文本处理器sed

文本处理器sed

sed是一种流编辑器,一次处理一行,处理空间被称为模式空间,配合正则表达式与shell脚本使用广泛。
默认打印p选项

选项

-n 关闭默认打印
-i.bak 	将原文件复制为.bak备份文件,并修改原文件
-r 配合扩展表达式
支持正则表达式,用/pattern/格式

地址界定

不给定地址    对全文进行处理
单地址 		n:指定的行,$最后一行(区别正则表达式是词尾)
				/pattern/:被正则表达式匹配到的行
地址范围		n,m		从第n行到第m行
				n,+m	从第n行到n+m行
				/pattern1/,/pattern2/ 	从正则表达式首次匹配的行到第二次匹配的行
~:步进		
  1~2 从第一行开始,每隔两行=奇数行;
  2~2 从第二行开始,每隔两行=偶数行

命令

p    打印
d   删除
a   	匹配的行的下一行追加指定字符,若需加空格,需使用反斜杠\进行转义
c 	  替换指定行为指定内容
w	  写匹配到的内容到指定文件
r 	 读取指定文件内容到匹配的行的下一行
=   匹配到的行打印出行号
!	 取反,!位于地址界定与命令之间
s  替换,\1引用正则表达式得第一个分组,\2则代表第二个分组,依次类推,&代表匹配的内容
----   g表示全文替换,如果不加g,表示全文每行的第一个替换
变量用三个单引号引用

示例1

用sed获取ifconfig得ip

ifconfig | sed -n '2p' |sed -r 's/(^[^0-9]+)([0-9.]+)( .*$)/\2/'
正则表达式解释:(以非数字[^0-9]开头的内容)(数字.匹配1次或多次,匹配ip)(任意字符到词尾)
将ifconifg先取第二行,然后将该行分为三个部分,第一个括号表示从开头到非数字,第二个括号表示数字.,第三个表示空格到词尾,然后用\2取第二部分做替换,也就是取到ip部分
优化:只对第二部分进行分组,同时用该分组做替换即可
ifconfig | sed -n '2p' |sed -r 's/^[^0-9]+([0-9.]+) .*$/\1/'

示例2

替换行内容,在行尾追加1
sed -ri.bak '/^[[:space:]]+linux16/s@.*@&net.ifnames=0@' /boot/grub2/grub.cfg

posted @ 2020-05-30 16:35  zoer  阅读(133)  评论(0编辑  收藏  举报