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言叙