Shell之sed编辑器

一、sed编辑器

1. sed编辑器概述

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本中。

2. sed编辑器的工作流程

sed的工作流程主要包括读取、执行和显示三个过程。

  1. 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
  2. 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
  3. 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

    注:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

二、sed命令

1. 命令格式

sed -e '操作' 文件1 文件2 ...

sed -n -e '操作' 文件1 文件2 ...

sed -f 脚本文件 文件1 文件2 ...

sed -i -e '操作' 文件1 文件2 ...

2. 常用选项

常用选项 说明
-e或--expression= 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f或--file= 表示用指定的脚本文件来处理输入的文本文件
-h或--help 显示帮助
-n、--quiet或silent 禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i 直接修改目标文本文件

3. 常用操作

常用操作 说明
s 替换,替换指定字符
d 删除,删除选定的行
a 增加,在当前行下面增加一行指定内容
i 插入,在选定行上面插入一行指定内容
c 替换,将选定行替换为指定内容
y 字符转换,转换前后的字符前后必须相同
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用
= 打印行号
l(小写L) 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

三、操作实例

1. 打印内容

sed -n -e 'p' 文件名

打印文本内容

[root@localhost ~]# sed -n -e 'p' test1.txt
one
two
three
four
five
six

sed -n -e '=' 文件名

仅打印行号

[root@localhost ~]# sed -n -e '=' test1.txt
1
2
3
4
5
6

sed -n -e 'l' 文件名

打印文本并显示结束符

[root@localhost ~]# sed -n -e 'l' test1.txt
one$
two$
three$
four$
five$
six$

sed -n -e '=;p' 文件名

显示行号再打印文本

[root@localhost ~]# sed -n -e '=;p' test1.txt
1
one
2
two
3
three
4
four
5
five
6
six

sed -n -e '=' -e 'p' 文件名

显示行号再打印文本

[root@localhost ~]# sed -n -e '=' -e 'p' test1.txt
1
one
2
two
3
three
4
four
5
five
6
six

sed -n '

> =

> p

> ' 文件名

显示行号再打印文本

[root@localhost ~]# sed -n '
> =
> p
> ' test1.txt
1
one
2
two
3
three
4
four
5
five
6
six

2. 使用地址

sed编辑器有2种寻址方式:

  1. 以数字形式表示行区间
  2. 用文本模式来过滤此行

sed -n '1p' 文件名

打印指定行内容

[root@localhost ~]# sed -n '1p' test1.txt
one

sed -n '$p' 文件名

打印最后一行内容

[root@localhost ~]# sed -n '$p' test1.txt
six

sed -n '1,3p' 文件名

打印一到三行内容

[root@localhost ~]# sed -n '1,3p' test1.txt
one
two
three

sed -n '3,$p' 文件名

从第3行打印至末尾行

[root@localhost ~]# sed -n '3,$p' test1.txt
three
four
five
six

sed -n '1,+3p' 文件名

打印第一行以及后面的三行,即打印1-4行

[root@localhost ~]# sed -n '1,+3p' test1.txt
one
two
three
four

sed '5q' 文件名

打印前5行后退出,q表示退出

[root@localhost ~]# sed '5q' test1.txt
one
two
three
four
five

sed -n 'p;n' 文件名

打印奇数行,p为打印,n为移动至下一行

[root@localhost ~]# sed -n 'p;n'  test1.txt
one
three
five

sed -n 'n;p' 文件名

打印偶数行,n为移动至下一行,p为打印

[root@localhost ~]# sed -n 'n;p'  test1.txt
two
four
six

sed -n '2,${n;p}' 文件名

从第二行至末尾行,按照隔一行打印的顺序执行

[root@localhost ~]# sed -n '2,${n;p}' test1.txt
three
five

sed -n '/a/p' 文件名

打印含有a的行

[root@localhost ~]# sed -n '/user/p' /etc/passwd
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

sed -n '/^a/p' 文件名

打印以a开头的行

[root@localhost ~]# sed -n '/^a/p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

sed -n '/a$/p' 文件名

打印以a结尾的行

[root@localhost ~]# sed -n '/bash$/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
123456:x:1000:1000:123456:/home/123456:/bin/bash

sed -n '/a|b/p' 文件名

打印含有a或b的行

[root@localhost ~]# sed -n '/ftp\|root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

sed -n '2,/a/p' 文件名

从第2行打印至含有a的行

[root@localhost ~]# sed -n '2,/nobody/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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

sed -n '2,/a/=' 文件名

打印第二行至含有a的行的行号

[root@localhost ~]# sed -n '2,/nobody/=' /etc/passwd
2
3
4
5
6
7
8
9
10
11
12
13

sed -nr '/ro{1,}t/p' 文件名

打印含有ro{1个或多个o}t的行,-r表示支持扩展正则表达式

[root@localhost ~]# sed -nr '/ro{1,}t/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

3. 删除行

sed 'd' 文件名

删除全部

[root@localhost ~]# sed 'd' test1.txt
[root@localhost ~]#

sed '3d' 文件名

删除第3行

[root@localhost ~]# sed '3d' test1.txt
one
two
four
five
six

sed '2,4d' 文件名

删除2至4行

[root@localhost ~]# sed '2,4d' test1.txt
one
five
six

sed '$d' 文件名

删除末尾行

[root@localhost ~]# sed '$d' test1.txt
one
two
three
four
five

sed '/^$/d' 文件名

删除空行

[root@localhost ~]# cat test1.txt
one
two three
four five
six
[root@localhost ~]# sed '/^$/d' test1.txt
one
two
three
four
five
six

sed '/a$/d' 文件名

删除以a结尾的行

[root@localhost ~]# sed '/nologin$/d' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
123456:x:1000:1000:123456:/home/123456:/bin/bash

sed '/a$/!d' 文件名

删除不是以a结尾的行,!表示取反操作

[root@localhost ~]# sed '/nologin$/!d' /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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

sed '/a/,/b/d' 文件名

从含有位置1的行开启删除功能,到含有位置2的行关闭删除功能,并在含有位置1的行再次出现后开启删除功能,循环往复。若不再出现含有位置2的行,则删除功能不会停止。

即从含有a的行开启删除,直到含有b的行出现关闭删除功能并在下一个含有a的行再次开启删除功能,循环往复。若不再出现含有b的行,则删除功能不会停止。

[root@localhost ~]# cat test1.txt
1
2
3
4
5
6
11
22
33
111
222
444
555
666
[root@localhost ~]# sed '/2/,/3/d' test1.txt
1
4
5
6
11
111

4. 替换

一般格式为:sed 行范围 s/旧字符串/新字符串/替换标记

替换标记有:

  1. 数字:表明新字符串将替换第几处匹配的地方
  2. g:表明新字符串将会替换所有匹配的地方
  3. p:打印与替换命令匹配的行,与-n一起使用
  4. w 文件:将替换的结果写到文件中,若需要保存全部结果,可使用重定向输入

sed -n 's/1/2/p' 文件名

将每行的第一个字符串1替换为字符串2

[root@localhost ~]# sed -n 's/root/admin/p' /etc/passwd
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin

sed -n 's/1/2/2p' 文件名

将每行的第2个字符串1替换为字符串2

[root@localhost ~]# sed -n 's/root/admin/2p' /etc/passwd
root:x:0:0:admin:/root:/bin/bash

sed -n 's/1/2/gp' 文件名

将全部的字符串1替换为字符串2

[root@localhost ~]# sed -n 's/root/admin/gp' /etc/passwd
admin:x:0:0:admin:/admin:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin

sed 's/1//g' 文件名

将全部的字符串1替换为空,即删除全部的字符串1

[root@localhost ~]# sed 's/root//g' /etc/passwd
:x:0:0::/:/bin/bash
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
operator:x:11:0:operator:/:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

sed '1,20 s/^/#/' 文件名

将1到20行的开头替换为#

[root@localhost ~]# sed '1,20 s/^/#/' /etc/passwd
#root:x:0:0:root:/root:/bin/bash
#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
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#nobody:x:99:99:Nobody:/:/sbin/nologin
#systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#dbus:x:81:81:System message bus:/:/sbin/nologin
#polkitd:x:999:997:User for polkitd:/:/sbin/nologin
#abrt:x:173:173::/etc/abrt:/sbin/nologin
#libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
#rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
#colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

sed '/^root/ s/$/#/' 文件名

将以root开头的行的末尾替换为#

[root@localhost ~]# sed '/^root/ s/$/#/' /etc/passwd
root:x:0:0:root:/root:/bin/bash#
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

sed -f 脚本文件 处理文件

使用脚本文件对处理文件进行sed操作

[root@localhost ~]# cat script.sed
/^root/ s/^/#/ /nologin/ s/nologin/false/
[root@localhost ~]# sed -f script.sed /etc/passwd
#root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/false
daemon:x:2:2:daemon:/sbin:/sbin/false
adm:x:3:4:adm:/var/adm:/sbin/false
lp:x:4:7:lp:/var/spool/lpd:/sbin/false
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/false
operator:x:11:0:operator:/root:/sbin/false
games:x:12:100:games:/usr/games:/sbin/false
ftp:x:14:50:FTP User:/var/ftp:/sbin/false
nobody:x:99:99:Nobody:/:/sbin/false
systemd-network:x:192:192:systemd Network Management:/:/sbin/false
dbus:x:81:81:System message bus:/:/sbin/false
polkitd:x:999:997:User for polkitd:/:/sbin/false
abrt:x:173:173::/etc/abrt:/sbin/false
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/false
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/false
colord:x:997:994:User for colord:/var/lib/colord:/sbin/false
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/false
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/false
rtkit:x:172:172:RealtimeKit:/proc:/sbin/false
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/false
qemu:x:107:107:qemu user:/:/sbin/false
ntp:x:38:38::/etc/ntp:/sbin/false
radvd:x:75:75:radvd user:/:/sbin/false
chrony:x:994:990::/var/lib/chrony:/sbin/false
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/false
usbmuxd:x:113:113:usbmuxd user:/:/sbin/false
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/false
sssd:x:992:987:User for sssd:/:/sbin/false
gdm:x:42:42::/var/lib/gdm:/sbin/false
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/false
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/false
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/false
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/false
postfix:x:89:89::/var/spool/postfix:/sbin/false
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/false
tcpdump:x:72:72::/:/sbin/false
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/false
dhcpd:x:177:177:DHCP server:/:/sbin/false
apache:x:48:48:Apache:/usr/share/httpd:/sbin/false

sed '1,20w 保存文件' 处理文件

将处理文件的1至20行写入到保存文件

[root@localhost ~]# sed '1,20w sed.txt' /etc/passwd
root:x:0:0:root:/root:/bin/bash
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# cat sed.txt
root:x:0:0:root:/root:/bin/bash
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin

sed '1,20 s/^/#/w 保存文件' 处理文件

将处理文件的1至20行开头替换为#并写入到保存文件

[root@localhost ~]# sed '1,20 s/^/#/w sed.txt' /etc/passwd
#root:x:0:0:root:/root:/bin/bash
#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
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#nobody:x:99:99:Nobody:/:/sbin/nologin
#systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#dbus:x:81:81:System message bus:/:/sbin/nologin
#polkitd:x:999:997:User for polkitd:/:/sbin/nologin
#abrt:x:173:173::/etc/abrt:/sbin/nologin
#libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
#rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
#colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost ~]# cat sed.txt
#root:x:0:0:root:/root:/bin/bash
#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
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#nobody:x:99:99:Nobody:/:/sbin/nologin
#systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#dbus:x:81:81:System message bus:/:/sbin/nologin
#polkitd:x:999:997:User for polkitd:/:/sbin/nologin
#abrt:x:173:173::/etc/abrt:/sbin/nologin
#libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
#rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
#colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin

sed -n 's//a/b//c/d/p' 文件名

将文件中的/a/b替换为/c/d

注:字符串分隔符可用其他任意字符代替,例如"!"、"#"、" "、"1"等。

[root@localhost ~]# sed -n 's/\/bin\/bash/\/bin\/sed/p' /etc/passwd
root:x:0:0:root:/root:/bin/sed
123456:x:1000:1000:123456:/home/123456:/bin/sed
[root@localhost ~]# sed -n 's!/bin/bash!/bin/sed!p' /etc/passwd
root:x:0:0:root:/root:/bin/sed
123456:x:1000:1000:123456:/home/123456:/bin/sed
[root@localhost ~]# sed -n 's#/bin/bash#/bin/sed#p' /etc/passwd
root:x:0:0:root:/root:/bin/sed
123456:x:1000:1000:123456:/home/123456:/bin/sed
[root@localhost ~]# sed -n 's /bin/bash /bin/sed p' /etc/passwd
root:x:0:0:root:/root:/bin/sed
123456:x:1000:1000:123456:/home/123456:/bin/sed
[root@localhost ~]# echo 94599 >test.txt
[root@localhost ~]# cat test.txt
94599
[root@localhost ~]# sed -i 's9\945\9\99\98\939g' test.txt
[root@localhost ~]# cat test.txt
9893

5. 插入

sed '/a/c b' 文件名

将含有字符串a的行替换为字符串b

[root@localhost ~]# cat test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
[root@localhost ~]# sed '/1/c ABC' test1.txt
6
5
4
3
2
ABC
66
55
44
33
22
ABC

sed '/a/ y/b/c/' 文件名

将含有a的行中的字符b替换为字符c,b与c的字符长度要相同

[root@localhost ~]# cat test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
12
112
211
[root@localhost ~]# sed '/1/ y/12/AB/' test1.txt
6
5
4
3
2
A
66
55
44
33
22
AA
AB
AAB
BAA
[root@localhost ~]# sed '/2/ y/12/AB/' test1.txt
6
5
4
3
B
1
66
55
44
33
BB
11
AB
AAB
BAA
[root@localhost ~]# sed '/12/ y/12/AB/' test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
AB
AAB
211

sed 'n,ma b' 文件名

在第n行至第m行后插入字符b

[root@localhost ~]# cat test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
12
112
211
[root@localhost ~]# sed '1,3a ABC' test1.txt
6
ABC
5
ABC
4
ABC
3
2
1
66
55
44
33
22
11
12
112
211

sed 'ni a' 文件名

在第n行插入字符串a

[root@localhost ~]# sed '1i ABC' test1.txt
ABC
6
5
4
3
2
1
66
55
44
33
22
11
12
112
211

sed 'nr 插入文件' 文件名

在第n行后插入文件

[root@localhost ~]# cat test.txt
9893
[root@localhost ~]# cat test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
12
112
211
[root@localhost ~]# sed '5r test.txt' test1.txt
6
5
4
3
2
9893
1
66
55
44
33
22
11
12
112
211

sed '/a/{H;d};$G' 文件名

将包含a的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后

[root@localhost ~]# sed '/root/{H;d};$G' /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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

sed '1,2H;3,4G' 文件名

将1、2行复制到3和4行的下面

[root@localhost ~]# cat test1.txt
6
5
4
3
2
1
66
55
44
33
22
11
12
112
211
[root@localhost ~]# sed '1,2H;3,4G' test1.txt
6
5
4 6
5
3 6
5
2
1
66
55
44
33
22
11
12
112
211

“111222333”将1和3互换位置

[root@localhost ~]# echo "111222333" | sed -r 's/(111)(222)/\2\1/'
222111333

“111222333”将首位字符互换位置、

[root@localhost ~]# echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/'
311222331

Shell之sed编辑器的更多相关文章

  1. Shell 基础 -- 流编辑器 sed 详解

    一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...

  2. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  3. shell编程之sed编辑器&gawk程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...

  4. Shell:sed流编辑器

    转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓.它可以完美 ...

  5. shell——sed编辑器

    目录 一.sed编辑器 1.1.sed编辑器工作流程 读取: 执行: 显示: 1.2.格式 1.3.常用选项 1.4.常用操作 1.5.替换 一.sed编辑器 sed是一种流编辑器,流编辑器会在编辑器 ...

  6. [shell基础]——sed命令

    关于sed sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓 ...

  7. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  8. Shell编程—sed进阶

    1多行命令 sed编辑器包含了三个可用来处理多行文本的特殊命令. N:将数据流中的下一行加进来创建一个多行组来处理. D:删除多行组中的一行. P:打印多行组中的一行. 1.1next命令 1. 单行 ...

  9. Shell编程—sed和gawk

    1文本处理 1.1sed 编辑器 sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或 ...

随机推荐

  1. Count Sequences

    \(考虑问题的转换,即把用n个球,分为r-l+2个部分,其中第1部分表示该区域的球值为l,第二部分表示该区域的球值为l+1\) \(......第r-l+2部分为不选该区域的球\) \(该问题等价于在 ...

  2. Ribbon原理与应用

    一.定义 Ribbon是请求的负载均衡器,它为我们提供了几种负载均衡算法:轮询.随机等. 二.配置 spring: cloud: loadbalancer: retry: enabled: true ...

  3. SYCOJ4972的幂次方

    题目- 2的幂次方 (shiyancang.cn) 递归题 #include<bits/stdc++.h> using namespace std; int k; void f(int n ...

  4. 【Java】注解Annotation

    注解 Annotation 理解Annotation jdk 5.0 新增的功能 Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理.通 ...

  5. Hello world.java

    Hello world 1.随便新建一个文件夹,存放源代码 2.新建一个Java文件 文件后缀名为.java Hello.java [注意点]系统可能显示没有后缀名,我们需要手动打开 3.编写代码 p ...

  6. 刨根问底: Kafka 到底会不会丢数据?

    大家好,我是 华仔, 又跟大家见面了. 上一篇作为专题系列的第二篇,从演进的角度带你深度剖析了关于 Kafka 请求处理全流程以及超高并发的网络架构设计的实现细节,今天开启第三篇,我们来聊聊 Kafk ...

  7. 《剑指offer》面试题43. 1~n整数中1出现的次数

    问题描述 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 示例 1: 输入:n = 12 ...

  8. [C# 学习]委托和线程

    委托有点像C语言的函数指针,简单总结一下如何使用委托. 1. 声明一个委托 public delegate void LabelSetEventHandler(Label la, string str ...

  9. Hbuilder将移动app或者web项目打包

    1. 直接将项目 npm run build 打包生成dist文件 2.将dist文件放到Hbuilderx或者Hbuilder里面,这个时候你会发现他是w的,需要将其转换为A 点击该dist项目右键 ...

  10. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析

    设计背景 消息中间件的本身定义来考虑,应该尽量减少对于外部第三方中间件的依赖.一般来说依赖的外部系统越多,也会使得本身的设计越复杂,采用文件系统作为消息存储的方式. RocketMQ存储机制 消息中间 ...