Linux文本处理三剑客之sed

一、sed介绍


  • 一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)(为什么叫模式空间呢:因为 sed(不是所有的行都处理)可以指定仅仅处理哪些行,所以 sed 可以grep 一样做模式过滤的 符合模式条件的处理 不符合条件的不予处理 ),接着用sed 编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
  • 符合模式(模式空间中的模式 每次读取一行 匹配模式 编辑命令)做编辑(到底是删除还是现实还是什么取决于 sed的编辑命令)
  • Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

二、sed正则表达式


i: 表示写入到文件中

1、p打印

 sed -n '/\:/p' file		                 ###显示有冒号的一行
 sed -n '/^a/p' file	                     ###以a开头 n:(取消默认输出)
 sed -n '/a$/p' file	                      ###a结尾
 sed -n '3,5p' file	                         ###显示3-5行
 sed -n '3,5!p' file                         ###除了3-5行都显示

2、D(Delete):删除

 sed '/^#/d' file	                         ###删除以#开头的行
 sed  '1,4d' file            		         ###删除1-4行
 sed '/^a/!d' file		                     ###不删除以a开头的行
 sed '/^$/d' file                            ###删除空行cat -E file可以看到每行都是以$结尾

3、A(Append):附加

 sed '/^abc/a hello ' file                   ###在file中^abc开头的下面一行加入hello \n:回车

4、C(Replace):重置

 sed '/^a/c dream' file                      ###以a开头的行改成dream

5、W(Write):写

 sed '/^a/w /mnt/file1' file	            ###把file中以a开头的内容写入file1文件中
 sed '6r /mnt/file1' file	                ###把file1内容写入到file的第6行

三、案例


1、通过脚本改变Apache端口

 vim chage_http.sh
  #!/bin/bash
  PORT=`grep ^Listen /etc/httpd/conf/httpd.conf`
  sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
  systemctl restart httpd

2、替换

ed的其他用法:s:(动作) g:(全局变量)
把a换成b,n换成m(3种方法)

 1. sed -e 's/a/b/g' -e 's/n/m/g' file      
 2. sed -e 's/a/b/g;s/n/m/g'  file            
 3. vim rule
    s/a/b/g
    s/n/m/g

 sed -f rule file                           
sed 's/#//g' file 					            ###将所有的#替换成空
sed 's/\///g' file					            ###将/替换成空
sed '2s/:/##/g'  file				            ###将第二行的:替换成##
sed '2,4s/:/##/g'  file				            ###将2-4行的:替换成##
sed '/a/,/b/s/:/##/g'  file			            ###从a到b,中间的:替换成##
sed 's/:/##/' file					            ###将每一行的首个:替换成##
sed 's/:/##/g'  file				            ##将所有的:替换成##
sed 'G' file						            ##每一行后添加空行
sed '$!G' file					                 ##除了最后一行 每一行添加空行
sed '=' file | sed 'N;s/\n//'				    ##将行号和内容放在一起
sed -n '$p' file					             ##显示最后一行

3、获取IP

把第二行以任意到inet 的替换为空,把 netmask到后面的替换为空

 ifconfig eth0|sed -n '2s/^.*inet //gp'|sed -n 's/ netmask.*$//gp'   

4、替换空格

cat test
a = b
c  =  d
b       =   b
dsfse werwe werwer
sed -i 's/\s\+=\s\+/=/g' test

四、sed后向引用


1、匹配网卡

当在前面匹配部分用小括号时.第一个括号内容可以在后面用\n(n=1,第一个括号的内容)输出对应的内容

 sed -n 's#()()#\1\2#gp' file
 ifconfig eth0|sed -rn '/inet\>/s#^.*inet (.*)netmask.*$#\1#gp'     ###取出IP,-r:转义
 sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd              ###以:为分隔符,换取第一行和最后一行的位置,[^:]+:匹配多个非冒号的字符

2、批量修改文件夹名

 mkdir file{1..10}.dream
 ls *.dream|sed -r 's#(^.*).dream#mv & \1.jpg#g'|bash              ###&代表前面的内容,\1代表着()的内容,通过bash进行修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wielun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值