Linux学习整理-sed

1.简介

下面的命令,来查阅sed的帮助文档

$ info sed
$ man sed

sed是Stream Editor的缩写,可以用来处理文件,或者管道符传递过来的数据流。

2.语法

sed SCRIPT INPUTFILE...

下面的命令是一样的。

root@ubuntu:~# cat input.txt 
hello world!!
root@ubuntu:~# sed 's/hello/world/' input.txt
world world!!
root@ubuntu:~# sed 's/hello/world/' < input.txt
world world!!
root@ubuntu:~# cat input.txt | sed 's/hello/world/' -
world world!!

下面的这些命令也是一样的

sed 's/hello/world/' input.txt > output.txt

sed -e 's/hello/world/' input.txt > output.txt
sed --expression='s/hello/world/' input.txt > output.txt

echo 's/hello/world/' > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt

3.用法

下面的常用命令都用下面这个文件

[root@centos ~]# cat -n mypassword 
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

3.1.打印行(查找)

为了显示行数,用 cat 加管道符
打印固定行
用到命令p和属性-n

[root@centos ~]# cat -n mypassword | sed -n '10p' -
    10	operator:x:11:0:operator:/root:/sbin/nologin

打印前10行

cat -n mypassword | head -n 10
跟这个命令一样

[root@centos ~]# cat -n mypassword | sed -n '1, 10p' -
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin

打印15行以后的所有行

[root@centos ~]# cat -n mypassword | sed -n '15,$p' -
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

打印后10行

这里用sed就不太好用了

[root@centos ~]# cat -n mypassword | tail -n 10
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

打印带有/bin/bash的行(这里正则要用\转译)

[root@centos ~]# cat -n mypassword | sed -n '/\/bin\/bash/p' -
     1	root:x:0:0:root:/root:/bin/bash
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash

打印nobody到postfix之间的行

[root@centos ~]# cat -n mypassword | sed -n '/nobody/,/postfix/p' -
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin

3.2 追加行

主要用到命令ia

在第二行后面追加行 命令a

[root@centos ~]# cat -n mypassword | sed  '2axxxxxxxxxxxxxxxxxxxxxxxxxx' -
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
xxxxxxxxxxxxxxxxxxxxxxxxxx
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

在第二行前面追加行 命令i

[root@centos ~]# cat -n mypassword | sed  '2ixxxxxxxxxxxxxxxxxxxxxxxxxx' -
     1	root:x:0:0:root:/root:/bin/bash
xxxxxxxxxxxxxxxxxxxxxxxxxx
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

这就是ai 的区别

其余的跟上面的查找是一样的,先定位位置,再插入行

比如说
在nobody行后面追加一行

[root@centos ~]# cat -n mypassword | sed  '/nobody/axxxxxxxxxxxxxxxxxxxxxxxxxx' -
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13	nobody:x:99:99:Nobody:/:/sbin/nologin
xxxxxxxxxxxxxxxxxxxxxxxxxx
    14	systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

3.3 删除

主要用到命令d
删除2到15行

[root@centos ~]# cat -n mypassword | sed  '2,15d' -
     1	root:x:0:0:root:/root:/bin/bash
    16	polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    18	postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19	chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/sbin/nologin
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

删除 带有 /sbin/nologin 的行

[root@centos ~]# cat -n mypassword | sed  '/\/sbin\/nologin/d' -
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash

3.4 修改

修改的话,分为按行替换 和 按关键字替换

按行替换 就是 用命令 c
带有 /sbin/nologin 的行,替换成xx

[root@centos ~]# cat -n mypassword | sed  '/\/sbin\/nologin/c xx' -
     1	root:x:0:0:root:/root:/bin/bash
xx
xx
xx
xx
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
xx
xx

按关键字替换用
sed 's/aaa/bbb/g file'
把/sbin/nologin 替换成 /bin/bash

[root@centos ~]# cat -n mypassword | sed  's/\/sbin\/nologin/\/bin\/bash/g' -
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/bin/bash
     4	adm:x:3:4:adm:/var/adm:/bin/bash
     5	lp:x:4:7:lp:/var/spool/lpd:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/bin/bash
    10	operator:x:11:0:operator:/root:/bin/bash
    11	games:x:12:100:games:/usr/games:/bin/bash
    12	ftp:x:14:50:FTP User:/var/ftp:/bin/bash
    13	nobody:x:99:99:Nobody:/:/bin/bash
    14	systemd-network:x:192:192:systemd Network Management:/:/bin/bash
    15	dbus:x:81:81:System message bus:/:/bin/bash
    16	polkitd:x:999:998:User for polkitd:/:/bin/bash
    17	sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/bin/bash
    18	postfix:x:89:89::/var/spool/postfix:/bin/bash
    19	chrony:x:998:996::/var/lib/chrony:/bin/bash
    20	lihg:x:1000:1000:lihg:/home/lihg:/bin/bash
    21	nginx:x:997:995:nginx user:/var/cache/nginx:/bin/bash
    22	tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/bin/bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值