sed命令的基本使用方法(2)

[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

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ef88a69303e3145e72fa15d5dada22b6.html