sed的工作模式: sed是一个行文本编辑器,默认每次处理文本中所匹配到一行内容到模式空间,然后用后面的命令进行操作,操作完成之后,会把模式空间里面的内容实现在屏幕上,然后把模式空间的中的内容删除,同时把下一行所匹配到内容读入模式空间
语法格式:
[address]command
[line-address]command
command:命令(简单用法)
p:打印模式空间中行
d:删除,删除选择的行
r file:读取file中的内容追加到匹配的行后面
R file:读取file中的内容的第一行追加到匹配行的后面
w file:将匹配到的行,保存到file中
W file:将匹配到的行的第一行,保存到file中
a \string 在当前行下面插入文本。
i \string 在当前行上面插入文本。
! 表示后面的命令对所有没有被选定的行发生作用.
y 和s用法类似,但只能替换大小写
s/patten/string/ 把patten匹配到的换成string字符
还可以使用正则表达式元字符
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
*
匹配一个非换行符的任意字符,如:/s*
d/匹配s后接一个任意字符,最后是d。
sed替换标记:
g表示全局替换
\1表示前面第一个左括号所表示的内容,\2表示前面第二个左括号中表示的内容,以此类推
&表示前面匹配到的内容
常用的编辑命令就只有
d删除
a追加
i插入
c更改
s替换
y转换
n下一步
1d删除第一行
[root@localhost ~]# sed '1d' llao
asrsae
zxcvz
plplp
Why are you so skilled?
pure oxygen
[root@localhost ~]# cat llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
pure oxygen
删除最后一行
[root@localhost ~]# sed '$d' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
删除所有空行
[root@localhost ~]# sed '/^$/d' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
pure oxygen
asd
删除以pure开头的行
456
asrsae
zxcvz
plplp
Why are you so skilled?
asd
查看内容
[root@localhost ~]# cat llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
asd
将pure开头的那一行的pure删除并去掉""
[root@localhost ~]# sed '/^pure/{s/pure //;s/"//g}' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
oxygen
asd
替换as开头的两行为sed
[root@localhost ~]# sed '/^as*/{s/.*/sed/g}' llao
456
sed
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
sed
更改和替换的区别,替换可以替换掉那一行的某一个字段,而更改只能替换掉这一行里的所有东西
[root@localhost ~]# sed '/^Why/clp' llao //将Why开头的那一行换成lp
456
asrsae
zxcvz
plplp
lp
pure "oxygen"
asd
我们之前的操作可以优化,替换as开头的两行为sed
[root@localhost ~]# sed '/^as*/csed' llao
456
sed
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
sed
更改的时候还可以让前面多几个空格
[root@localhost ~]# sed '/^as*/c\ sed' llao
456
sed
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
sed
还可以那一行中间多一个tab
[root@localhost ~]# sed '/^as*/cse\td' llao
456
se d
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
se d
可以在指定的那一行的后面增加一行新内容
[root@localhost ~]# sed '/^Why/anihao' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
nihao
pure "oxygen"
asd
所有as开头的后面都增加一行nihao
[root@localhost ~]# sed '/^as*/anihao' llao
456
asrsae
nihao
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
asd
nihao
可以在指定的那一行的直接添加文本,会将原来的文本顶到下一行
在456前面插入一个nihao
[root@localhost ~]# sed '/456/inihao' llao
nihao
456
asrsae
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
asd
在前三行前插入一个nihao
[root@localhost ~]# sed '1,3inihao' llao
nihao
456
nihao
asrsae
nihao
zxcvz
plplp
Why are you so skilled?
pure "oxygen"
asd
将文本里所有内容都换成大写内容
[root@localhost ~]# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' llao
456
ASRSAE
ZXCVZ
PLPLP
WHY ARE YOU SO SKILLED?
PURE "OXYGEN"
ASD
将第四行的p全部替换成l
[root@localhost ~]# sed '4y/p/l/' llao
456
asrsae
zxcvz
lllll
Why are you so skilled?
pure "oxygen"
asd
用n匹配到这一行后不对这一行进行操作,而是操作下一行
[root@localhost ~]# sed '/^Why/{n;s/pure //;s/"//g}' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
oxygen
asd
将Why开头的文本的下一行的pure去掉并且去掉""
[root@localhost ~]# sed '/^Why/{n;s/pure /pure\n/;s/"//g}' llao
456
asrsae
zxcvz
plplp
Why are you so skilled?
pure
oxygen
asd
将pure “oxygen"中间换行并去掉”"