sed 插入多行_shell study19day正则sed命令

1、sed流编辑器

(1)简介

Sed是一款流编辑工具,主要对文本进行过滤以及替换操作。

(2)sed基本语法

sed [-hnV][-e][-f][文本文件]

参数选项:

-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/bashoperator:x:11:0:operator:/test:/sbin/nologin

注:-n只显示被处理后的行

所有已root开头的行,都会被替换成roottest。

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

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

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

B、打印包含关键字www所在的所有行

[root@test ~]# sed -n '/www/p' /etc/passwdwww: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/passwdroot:x:0:0:root:/root:/bin/bashtestbin:x:1:1:bin:/bin:/sbin/nologintestdaemon:x:2:2:daemon:/sbin:/sbin/nologintestadm:x:3:4:adm:/var/adm:/sbin/nologin

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

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

在匹配字符串下行增加test

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

E、代替

将第1-2行,用test代替

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

F、打印指定范围文本内容

打印root和ftp之间的所有行内容

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

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

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

G、多点编辑

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

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

9cf8c6d0d0cba042c47778daa5f4efff.png

黄油饼是甜的,混着的眼泪是咸的,就像人生,交杂着各种复杂而美好的味道。

——汪曾祺《食事》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值