9.4/9.5 sed # 9.4 sed 上 - 首先在root目录下创建一个目录sed ,把grep目录下的passwd文件拷贝到 sed目录 当前目录下来,做实验每一个目录一个文件比较好,不容易乱 ``` [root@aminglinux-01 ~]# ls 111 1_sorft.txt 1.txt.bak 2.txt.bak aminglinux biji.txt test 123 1.txt 234 3.txt anaconda-ks.cfg.1 get-pip.py 1_heard.txt 1.txt~ 2.txt 4.txt bb.txt grep [root@aminglinux-01 ~]# mkdir sed [root@aminglinux-01 ~]# cd sed/ [root@aminglinux-01 sed]# cp ../grep/passwd test.txt [root@aminglinux-01 sed]# pwd /root/sed [root@aminglinux-01 sed]# ls test.txt [root@aminglinux-01 sed]# ``` - 首先看sed怎么样去实现grep的功能,匹配的功能 - sed - '/字符/'p test.txt 打印所有的行,而且还把 相关的打印了2遍 ``` [root@aminglinux-01 sed]# sed '/root/'p test.txt root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkd 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:1o1:0:operator:/root:/sbin/nologin operator:x:1o1:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin ``` - 如果不想把那些无关的行 打印出来 使用命令 sed -n '/root/'p test.txt ``` [root@aminglinux-01 sed]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:1o1:0:operator:/root:/sbin/nologin [root@aminglinux-01 sed]# ``` 1. sed 也支持 . * + sed -n '/r.t/'p test.txt ``` [root@aminglinux-01 sed]# sed -n '/r.t/'p test.txt operator:x:1o1:0:operator:/root:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@aminglinux-01 sed]# sed -n '/r*t/'p test.txt root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt operator:x:1o1:0:operator:/root:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# sed -n '/r+t/'p test.txt [root@aminglinux-01 sed]# sed -n '/r\+t/'p test.txt ``` 2. +需要加上脱义\ 但是也可以 sed -nr 就不用加脱义符号了 ``` [root@aminglinux-01 sed]# sed -nr '/r+t/'p test.txt [root@aminglinux-01 sed]# sed -nr '/o+t/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:1o1:0:operator:/root:/sbin/nologin [root@aminglinux-01 sed]# ``` 3. 如果sed -n 不加 r 肯定就出不来, 类似grep -E 的选项 ``` [root@aminglinux-01 sed]# sed -n '/o+t/'p test.txt [root@aminglinux-01 sed]# ``` - 匹配2次o sed -nr '/o{2}/'p test.txt ``` [root@aminglinux-01 sed]# sed -nr '/o{2}/'p test.txt root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:1o1:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash [root@aminglinux-01 sed]# ``` - 匹配| 或者 sed -nr '/root|bus/'p test.txt ``` [root@aminglinux-01 sed]# sed -nr '/root|bus/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:1o1:0:operator:/root:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin [root@aminglinux-01 sed]# ``` - sed用法不仅仅是匹配,也可以打印指定的行 打印第二行 - ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170825/205737746.png?p_w_picpathslim) ``` [root@aminglinux-01 sed]# sed -n '2'p test.txt bin:x:1:1:bin:/bin:/sbin/nologin 打印2-5行 [root@aminglinux-01 sed]# sed -n '2,5'p test.txt bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkd ``` - 打印25行到末行 $表示末行 ``` [root@aminglinux-01 sed]# sed -n '25,$'p test.txt user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` - 打印全部,也就是第一行到最后一行 1,$ ``` [root@aminglinux-01 sed]# sed -n '1,$'p test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkd 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:1o1:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` - sed -e 匹配指定的行还要做另外的操作, 可以写多个 ``` [root@aminglinux-01 sed]# sed -e '1'p -e '/bus/'p -n test.txt root:x:0:0:root:/root:/bin/bash systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin [root@aminglinux-01 sed]# [root@aminglinux-01 sed]# sed -e '1'p -e '/bus/'p -e'/oo*/'p -n test.txt root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkd adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:1o1:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` # 9.5 sed 下 - sed I 大小写 ``` [root@aminglinux-01 sed]# sed -n '/bus/'p test.txt systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin 把test.txt 里面加个大写字母 BU [root@aminglinux-01 sed]# vi test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs ``` - 再来对比下sed I 和 sed 不加I的区别 ``` [root@aminglinux-01 sed]# sed -n '/bus/'p test.txt systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin [root@aminglinux-01 sed]# sed -n '/bus/'Ip test.txt 222222:r.o:ldkdkdkdBUs systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin [root@aminglinux-01 sed]# ``` - 删除指定的行 sed '范围'd sed '1,10'd test.txt 删除test.txt的 1-10行 ``` [root@aminglinux-01 sed]# sed '1,10'd test.txt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:1o1:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` - 删掉前面25行,它这个删除并没有 真正把文件内容删除掉,sed ''d 仅仅是在屏幕当中 把剩下的行给列出来 ``` [root@aminglinux-01 sed]# sed '1,25'd test.txt user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# [root@aminglinux-01 sed]# wc -l test.txt 31 test.txt [root@aminglinux-01 sed]# ``` - 先把文件test.txt拷贝下 拷贝成test.txt.bak - sed -i 是删除文件内容 sed -i '1,25'd test.txt ``` [root@aminglinux-01 sed]# wc -l test.txt 31 test.txt [root@aminglinux-01 sed]# cp test.txt test.txt.bak [root@aminglinux-01 sed]# sed -i '1,25'd test.txt [root@aminglinux-01 sed]# wc -l test.txt 6 test.txt [root@aminglinux-01 sed]# ``` - 也可以加入正则表达式,把user2 相关的删掉 sed -i '/user2/'d test.txt ``` [root@aminglinux-01 sed]# sed -i '/user2/'d test.txt [root@aminglinux-01 sed]# cat test.txt user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` - [ ] 打印p,删除d - 再把test.txt 拷贝回来 ``` [root@aminglinux-01 sed]# cp test.txt.bak test.txt cp:是否覆盖"test.txt"? y [root@aminglinux-01 sed]# ``` - 替换 把test.txt 里面的前面10行的 root 替换为 toor , sed '1,10s/root/toor/g' test.txt ``` [root@aminglinux-01 sed]# sed '1,10s/root/toor/g' test.txt toor:x:0:0:toor:/toor:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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:1o1:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/no1ologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/hoooome/user5:/bin/bash user6:x:1008:1010::/hooome/user6:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin [root@aminglinux-01 sed]# ``` - sed也支持正则表达式 把ro+ 替换成 r sed -r '1,10s/ro+/r/g' test.txt |head ``` [root@aminglinux-01 sed]# sed '1,10s/ro+/r/g' test.txt |head root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# 不成功?添加正则表达式 + 需要 sed -r [root@aminglinux-01 sed]# sed -r '1,10s/ro+/r/g' test.txt |head rt:x:0:0:rt:/rt:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# ``` - 针对test.txt前10行 做个替换 ``` [root@aminglinux-01 sed]# head test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 ``` - 把前10行 的 开头的 和 结尾替换位置 sed -r 's/字符/'\字符\' - [ ] s是指的所有行, 第一行是非冒号[^:]+ 表示只要是非冒号的字符 1个或 多个 - [ ] 第二个(.*)表示所有 - [ ] 后面的[^:]+ 表示非冒号的 字符 1个或多个 - [ ] 前面用了小括号() 后面就要用反斜杠\1\2\3 - [ ] 原来是\1:\2:\3/' 现在把最前面1 和最后面3替换 就是\3:\2:\1/' ``` [root@aminglinux-01 sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' /bin/bash:x:0:0:root:/root:root /sbin/nologin:x:1:1:bin:/bin:bin dskdklldkdddkdkrao:222 /sbin/NOLOGIN:x:2:2:daemon:/sbin:daemon ldkdkdkdBUs:r.o:222222 /sbin/nologin:x:3:4:adm:/var/adm:adm /sbin/nologin:x:4:7:lp:/var/spool/lpd:lp /bin/sync:x:5:0:sync:/sbin:sync /sbin/shutdown:x:6:0:shutdown:/sbin:shutdown /sbin/halt:x:7:0:halt:/sbin:halt [root@aminglinux-01 sed]# ``` - 把test.txt的前面10行 里的 /root换成 123 ``` [root@aminglinux-01 sed]# head test.txt |sed 's//root/123/g' sed:-e 表达式 #1,字符 12:“s”的未知选项 [root@aminglinux-01 sed]# head test.txt |sed 's/\/root/123/g' root:x:0:0:root:123:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# ``` -把 /sbin/nologin/ 换成123 要么用脱义 \ 要么用@代替 ``` [root@aminglinux-01 sed]# head test.txt |sed 's//sbin/nolgin/123/g' sed:-e 表达式 #1,字符 9:“s”的未知选项 [root@aminglinux-01 sed]# head test.txt |sed 's/\/sbin\/nolgin/123/g' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# head test.txt |sed 's@/sbin/nolgin@123@g' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# ``` - 把前面10行 全部字母替换成 数字 ``` [root@aminglinux-01 sed]# head test.txt |sed 's/[a-zA-Z]//g' ::0:0::/:// ::1:1::/:// :222 ::2:2::/:// 222222:.: ::3:4:://:// ::4:7::///:// ::5:0::/:// ::6:0::/:// ::7:0::/:// [root@aminglinux-01 sed]# ``` -先看下前10行 ``` [root@aminglinux-01 sed]# head test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin dskdklldkdddkdkrao:222 daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN 222222:r.o:ldkdkdkdBUs 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 [root@aminglinux-01 sed]# ``` - 需要把前10行 所有行的前面加上字符串比如 加上 aaa: - (.*) 表示所有的字符 替换为 aaa:\1 - 可以用 /(.*)/\aaa:\1/ 或者也可以使用/(.*)/aaa:&/ ``` [root@aminglinux-01 sed]# head test.txt |sed -r 's/(.*)/aaa:&/' aaa:root:x:0:0:root:/root:/bin/bash aaa:bin:x:1:1:bin:/bin:/sbin/nologin aaa:dskdklldkdddkdkrao:222 aaa:daemon:x:2:2:daemon:/sbin:/sbin/NOLOGIN aaa:222222:r.o:ldkdkdkdBUs aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin aaa:sync:x:5:0:sync:/sbin:/bin/sync aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown aaa:halt:x:7:0:halt:/sbin:/sbin/halt [root@aminglinux-01 sed]# ``` - [x] grep sed awk 这三个要反复的练习才能熟练