Linux专题-Linux行处理工具sed

Linux行处理工具sed

简介

sed是Linux内置的流编辑器。sed处理文本时为逐行处理,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
默认情况下,sed不会对文本进行修改,只会将结果发送到屏幕上。

指令语法

sed [-hnV][-i<可选备份后缀>] [-e<脚本指令>][-f<脚本文件>] [文本]

参数说明

  • -e <script> 使用多个sed脚本执行编辑任务
  • -f <script_file> 类似-e <script>指定的script更换为script文件
  • -h 显示帮助
  • -n 仅显示script处理后的结果
  • -V 显示版本信息
  • -i 使用sed输出结果替换源文件,后跟文件后缀名,可以将源文件备份为指定后缀的新文件

脚本语法

sed可以使用script进行较为复杂的文本处理。script分为两部分,定址和操作。

定址语法

sed可以通过定址脚本觉得对文本文件中哪些特点的行进行处理,定址可以用数字指定的行号,或者用正则表达式进行匹配,也可以将数字和正则表达式结合使用。
定址语法
地址是一个数字时,表示对一行进行处理。
地址是正则表达式时,表示对匹配正则的行进行处理
地址是两个数字或正则表达式用逗号分隔时,表示对这两行之间的内容(包括这两行)进行处理

sed -n '3p' 1.txt	 # 显示1.txt文本中的第三行
sed -n ‘/^#/d’ 		# 删除以#开头的文件--删除注释行
sed -n ‘3,5p’ 1.txt		# 显示1.txt文本中第三到第五行
sed -n '/^2020-2-1/,/^2020-2-28/' abc.log 	#查看abc.log中以2020-2-1开头到2020-2-28结尾的行--查询2月日志
sed -n '1~2p' 1.txt 	#显示1.txt中所有奇数行,~表示步进,2为步进值

sed正则表达式用法

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行
[] 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。 
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行

常用操作语法

a\ 在当前行下面插入一行文本append
i\ 在当前行上面插入一行文本insert
c\ 把选定的行改为新的文本change
d 删除,删除选择的行
s 替换指定字符
p 打印模板块的行

删除操作

sed '/^$/d' 1.txt 	# 删除1.txt所有空行
sed -i ‘/^#/’d 1.sh 	# 删除1.sh所有注释行,并替换文件内容
sed ‘6,$’d 1.txt	 #删除1.txt第6行到最后一行

显示操作
显示操作在不加任何参数的情况下下会在显示行后额外显示一行。常用是加-n参数,只显示定址匹配的行

sed -n '/^2020-2-1/,/^2020-2-28/' abc.log 	#查看abc.log中以2020-2-1开头到2020-2-28结尾的行--查询2月日志

行编辑操作
a\ i\ c\三个指令使sed以行为单位对文本进行编辑,多行编辑时使用\代替换行符

行内操作
sed可以使用s在行内进行替换操作,类似vim中的操作,可以使用g表示全局替换,也可以使用数字g表示从第几次匹配后至末尾进行替换

#修改2.confg文件,将value的值从enable改成disable,并将源文件备份为2.conf.bak
sed -i.bak 's/value=enable/value=disable/g 2.conf 

多点编辑

sed 可以使用-e选项一条指令对文本内容中进行多次编辑

sed -e '/^#/d' -e '/^$/d' 123.sh 	#删除123.sh中所有的注释行和空行 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值