shell study-19day--正则sed命令

1、sed流编辑器
(1)简介
Sed是一款流编辑工具,主要对文本进行过滤以及替换操作。
(2)sed基本语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数选项:

-a:在当前行下面插入文件
-n:读取下一个输入行,用下一个命令处理新的行
-e:执行多个指令
-f:运行脚本
-i:编辑文件内容-i.bak编辑的同时创造.bak的备份
-r:使用扩展的正则表达式
-V:显示版本信息

命令选项:

i:在当前行上面插入文件,追加
c:把选定的行改为新的指定的文本,更改
p:打印
d:删除
r/R:读取文件/一行
w:另存
s:查找并替换,取代
y:按字符转换
h:拷贝模板块的内容到内存中的缓冲区。
H:追加模板块的内容到内存中的缓冲区。
g:获得内存缓冲区的内容,并替代当前模板块中的文本。
G:获得内存缓冲区的内容,并追加到当前模板块文本的后面 
D:删除\n 之前的内容
P:打印\n 之前的内容

替换标记:
数字:表明新文本将替换第几处模式匹配的地方

g:表示新文本将会替换所有匹配的文本
\n:匹配第n个子串
&:用正则表达式匹配的内容进行替换
sed 匹配字符集
^ 匹配行开始,如:/^root/匹配所有以root开头的行。
$ 匹配行结束,如:/root$/匹配所有以root结尾的行。
. 匹配一个非换行符的任意字符,如:/s.l/匹配 s 后接一个任意字符,最后是l。
* 匹配 0 个或多个字符,如:/*shell/匹配所有模板是一个或多个空格后紧跟shell的行。

(3)常用实例
A、替换
文本每行行首插入#号

[root@test ~]# sed 's/^/#/g' /etc/passwd

注:使用-i参数会直接修改文本。
查找文本中含root的行,并将root改为test

[root@test ~]# sed -n '/root/p' /etc/passwd |sed 's/root/test/' 
test:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/test:/sbin/nologin

注:-n只显示被处理后的行
所有已root开头的行,都会被替换成roottest。

[root@test ~]# sed 's/^root/&test/' /etc/passwd
roottest:x:0:0:root:/root:/bin/bash

不论什么字符,紧跟着s命令的都被认为是新的分隔符,#在这里是分隔符,代替了默认的/分隔符

[root@test ~]# sed 's#root#tets==#' /etc/passwd
tets==:x:0:0:root:/root:/bin/bash

sed -n ‘s/(love)able/\1rs/p’ filename  love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
B、打印包含关键字www所在的所有行

[root@test ~]# sed -n '/www/p' /etc/passwd
www:x:500:500::/home/www:/bin/bash

C、删除文本指定行
删除首行:

[root@test ~]# sed '1d' /etc/passwd

删除第二行

[root@test ~]# sed '2d' /etc/passwd

删除最后一行:

[root@test ~]# sed '$d' /etc/passwd

删除2-6行:

[root@test ~]# sed '2,6d' /etc/passwd

删除root所在行:

[root@test ~]# sed '/root/'d /etc/passwd

删除3到末行:

[root@test ~]# sed '3,$d' /etc/passwd

D、增加内容
在1-3行的下行分别插入test字符串
[root@test ~]# sed ‘1,3a test’ /etc/passwd

root:x:0:0:root:/root:/bin/bash
test
bin:x:1:1:bin:/bin:/sbin/nologin
test
daemon:x:2:2:daemon:/sbin:/sbin/nologin
test
adm:x:3:4:adm:/var/adm:/sbin/nologin

在第一行后增加多行,使用换行符\n

[root@test ~]# sed '1a hello\n world' /etc/passwd
root:x:0:0:root:/root:/bin/bash
hello
 world
bin:x:1:1:bin:/bin:/sbin/nologin

在匹配字符串下行增加test

[root@test ~]# sed '/netdata/a\test' /etc/passwd
netdata:x:497:498:netdata:/:/sbin/nologin
test

E、代替
将第1-2行,用test代替

[root@test ~]# sed '1,2c test' /etc/passwd
test

F、打印指定范围文本内容
打印root和ftp之间的所有行内容

[root@test ~]# sed -n '/root/,/ftp/p' /etc/passwd

打印第五行开始到第一个包含ftp开头的所有行

[root@test ~]# sed -n '5,/^ftp/p' /etc/passwd    

sed ‘/one/,/two/s/$/some/’ filename  对于模板one和two之间的行,每行的末尾用字符串some替换。
G、多点编辑

[root@test ~]# sed -e '1,5d' -e 's/www/qqqqq/' /etc/passwd

-e选项允许在同一行里执行多条命令。第一条命令删除1至5行,第二条命令用qqqqq替换www。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

个人公众号,微信搜索:linux言叙
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值