Linux中使用sed添加注释,sed命令的基本使用方法

命令格式解析

1.常见命令选项

-n 屏蔽默认输出

-i 直接修改文本内容

-f 使用sed脚本

-e 可指定多个处理动作

-r 启用扩展正则表达式,若与其他选项一起使用,应把r放在最前

-{} 可组合多个命令,以分号分割

基本的处理动作

p

打印行

4,6p  输出4,5,6行

4p,6p  输出4行,6行

d

删除行

4,6d  删除4,5,6行

s

字符串替换

s/old/new/  将每行的第一个old替换成new

s/old/new/3  将每行的第三个old替换成new

s/old/new/g  将全部的old替换成new

替换操作的分隔符"/"可以用其他字符代替,如&,#,便于修改文件路径

输出文本

sed -n 'p' aa.txt

输出书有行,相当于cat aa.txt相同

sed -n '6p' aa.txt

输出第6行

sed -n '4,7p' aa.txt

输出4,5,6,7行

sed -n '4,+5p' aa.txt

输出第4行以及其后的5行

sed -n '/^root/p' aa.txt

输出以root开头的行

sed -n 'p,n' aa.txt

输出奇数行,n表示读取下一行文本

sed -n 'n,p' aa.txt

输出偶数行,n表示读取下一行文本

sed -n '5,${n,p}' aa.txt

输出从第五行至文件末尾的所有偶数行

sed -n '$=' aa.txt

输出文件的行数

删除文本

sed -n '4,7d' aa.txt

删除4,5,6,7行

sed -n '/bin/d' aa.txt

删除包含bin的行

sed -n '/bin/!d' aa.txt

删除不包含bin的行,!表示取反

sed -n '/^bin/d' aa.txt

删除以bin开头的行

sed -n '/^$/d' aa.txt

删除所有空行

sed -n '/^$/{n;/^$/d}' aa.txt

删除重复空行,连续的空行只保留一个

替换文本

sed -n 's/aa/AA/' aa.txt

将每行中的第一个aa替换成AA

sed -n 's/aa/AA/4' aa.txt

将每行中的第4个aa替换成AA

sed -n 's/aa/AA/g' aa.txt

将文本所有的aa替换成AA

sed -n 's/aa//g' aa.txt

将文本所有的aa替换成空,相当于删除

sed -n 's/aa/&s/g' aa.txt

将文本所有的aa替换成aas,&表示查找到的字符

sed -n '4,6s/^/#/' aa.txt

将文本4,5,6行的开头加上#,相当于注释代码

sed -n '4,6s/^#//' aa.txt

将文本4,5,6行的开头#号去掉,相当于删除注释

sed的文本块处理

操作符

用途

命令示范

i

行前插入文本

2iAA,在第2行前面插入文本行AA

2,4iAA,在第2-4行每行前面插入文本行AA

a

行后插入文本

2aAA,在第2行后面插入文本行AA

2,4aAA,在第2-4行每行后面插入文本行AA

c

替换当前行

2cAA,把第二行内容替换成AA

导入到处操作

操作符

用途

命令示范

解释

r

读取文本

2r a.txt

在第2行的下面插入a.txt文件

2,4r a.txt

在第2-4行每行下面插入a.txt文件

w

保存到文件

2w a.txt

将第2行的内容保存为a.txt文件

2,4w a.txt

将第2-4行的内容保存为a.txt文件

sed复制剪切

模式空间

-存放当前处理的行,将处理的结果输出

-若当前行不符合处理条件,则原样输出

-处理完当前行再读入下一行进行处理

保持空间

-类似于windows的剪切板

-默认存放一个空行(换行符 \n)

基本动作

复制

H:模式空间--->追加--->保持空间

h:模式空间--->覆盖--->保持空间

粘贴

G:保持空间--->追加--->模式空间

g:保持空间--->覆盖--->模式空间

示范

1)把1-3行复制到文件末尾

[root@localhost ~]# cat a.txt

222222

444444444444

[root@localhost ~]# sed '1,3H;$G' a.txt  #此处有空行时因为第一次是在保持空间里追加,而保持空间默认有一个空行,注意理解H和h,G和g的区别

222222

444444444444

222222

[root@localhost ~]# sed '1h;2,3H;$G' a.txt  #此处没有空行,因为第一次是覆盖保持空间的空行

222222

444444444444

222222

2)把第一行剪切到文件末尾

[root@localhost ~]# sed '1h;1d;$G' a.txt

222222

333333333

444444444444

111

3)把第1,2行剪切到文件末尾

[root@localhost ~]# sed '1h;2H;1,2d;$G' a.txt

333333333

444444444444

111

222222

!取反操作

1)列出不使用bash的用户有哪些

[root@localhost ~]# sed -n '/bash$/!p' /etc/passwd

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

修改启动项

[root@localhost ~]# sed  '/^id/s/[0-6]/3/g' /etc/inittab

id:3:initdefault:

其他复杂使用

1)删除文件中每行的第二个、最后一个字符

分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符:

[root@localhost ~]# sed 's/.//2;s/.$//' a.txt

2)删除文件中每行的第二个、最后一个单词

分两次替换操作,第一次替换掉第2个单词,第二次替换掉最后一个单词:

[root@localhost ~]# sed -r 's/[a-Z]+//2;s/[a-Z]+([^a-Z]*)$/\1/' a.txt

3)将文件中每行的第一个、第二个字符互换

每行文本拆分为“第1个字符”、“第2个字符”、“剩下的所有字符”三个部分,然后通过替换操作重排顺序为“2-1-3”:

[root@localhost ~]# sed -r 's/^(.)(.)(.*)/\2\1\3/' a.txt

4)将文件中每行的第一个、第二个单词互换

每行文本拆分为“第1个单词”、“单词分隔”、“第2个单词”、“剩下的所有字符”四个部分,然后通过替换操作重排顺序为“3-2-1-4”:

[root@localhost ~]# sed -r 's/([a-Z]+)([^a-Z]*)([a-z]+)(.*)/\3\2\1\4/' a.txt

5)删除文件中所有的数字、行首的空格

因原文件内没有数字,行首也没有空格,这里稍作做一点处理,生成一个新测试文件:

[root@localhost ~]# sed 's/o/o7/;s/l/l4/;3,5s/^/  /' a.txt > b.txt

6)删除所有数字、行首空格的操作

[root@localhost ~]# sed -r 's/[0-9]//g;s/^( )+//' a.txt

7)为文件中每个大写字母添加括号

使用“&”可调用s替换操作中的整个查找串,所以可参考下列操作解决:

[root@localhost ~]# sed 's/[A-Z]/(&)/g' a.txt

或者

[root@localhost ~]# sed -r 's/([A-Z])/(\1)/g' a.txt

0b1331709591d260c1c78e86d0c51c18.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值