sed命令的使用

警告
本文最后更新于 2020-05-30 17:09,文中内容可能已过时。

命令格式:

sed [options] 'command' file(s)

sed [options] ‘要操作的行 内置命令’  file

or

sed [options] ‘/正则表达式/内置命令’  file

正则也可以不用/,用#@~特殊符号也可以

选项参数

-e 允许多项编辑 -n 取消默认的输出 -i 直接修改对应文件 -r 支持扩展元字符

内置命令参数

a      在当前行后添加一行或多行

c       在当前行进行替换修改

d      在当前行进行删除操作

i       在当前行之前插入文本

p      打印匹配的行或指定行

n      读入下一输入行,从下一条命令进行处理

!       对所选行以外的所有行应用命令

w      将匹配的内容写入到一个新的文件中

h      把模式空间里的内容重定向到暂存缓冲区

H      把模式空间里的内容追加到暂存缓冲区

g      取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容

G      取出暂存缓冲区的内容,将其复制到模式空间,追加在原有内容后面

s       替换命令标志

g      行内全局替换

i       忽略替换大小写

 

举例(加-i才会修改文件):

-e:先删除1-9行 在进行内容替换

sed -e ‘1,9d’ -e ’s#root#admin#g’ passwd

p:p和-n一般一起使用

打印包含halt的行

sed -n  ‘/halt/p’ passwd

打印第二行的内容

sed -n  ‘2p’ passwd

打印最后一行的内容

sed -n  ‘$p’ passwd

a:在当前行后添加一行或多行

在第3行的下一行添加指定内容

sed ‘3a content’ test.conf

c:在当前行进行替换修改

修改第七行的内容

sed ‘7c SELINUX=Disabled’ /etc/selinux/config

也可以使用正则,找出以SELINUX=开头的内容的行,修改为执行内容

sed ‘/^SELINUX=/c SELINUX=Disabled’ /etc/selinux/config

d:删除行

删除第二行的内容

sed ‘2d’ test.conf

删除最后一行的内容

sed ‘$d’ test.conf

使用正则删除包含mail的行

sed /mail/d test.conf

i:在当前行之前插入文本

在第三行插入的上一行添加指定内容

sed ‘3i content;’ passwd

w:将匹配的内容写入到一个新的文件中

将包含root的行,写入新的文件当中

sed -n ‘/root/w newfile’ passwd

n:对下一行进行操作

删除包含root行的下一行

sed ‘/root/{n;d}’ passwd

替换root行下一行的内容

sed -n ‘/root/{n;s#login#aaaaaaa#;p}’ passwd

!:对所选行以外的所有行应用命令

删除除了第三行的所有内容

sed ‘3!d’ /etc/hosts

s:替换字符串,i:忽略大小写,g:行中所有匹配内容都替换

将所有root修改为admin,忽略大小写

sed ’s/root/admin/gi’ passwd

&代表前面匹配到的内容,下面命令的作用就是在nologin结尾的行后面添加test

sed ’s/nologin$/&test/’ passwd

后向引用:在正则部分加括号,第一个括号匹配的内容为\1,第二个为\2    ......,&代表正则表达式整体匹配的内容

查找出eth1网卡的ip地址

ip a s eth1 | sed -n 3p | sed ’s#.et (.)/.*#\1#’

指定行批量添加注释。^匹配的是行首,替换为#&,即为在行首添加#号

sed ‘2,5s/^/#&/’ test.conf

匹配内容添加注释,在root所在行的行首添加注释

sed ‘/root/s/^/#&/’ test.conf

请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%