7.4 9.4-9.5
9.4 sed
(上)
? sed常用于替换指定的字符 ? 匹配包含root的行 [[email?protected] 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 此时匹配成功的行会打印两次,匹配不成功则仅打印一次 dfjfjpwejr.odro.d daemon:x:2:2:daemon:/sbin:/sbin/nologin rooooooooooot adm:x:3:4:adm:/var/adm:/soooobin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin bot boot booot boooot ? -n 在上面命令的基础上在sed后加-n参数,则匹配成功的行不会重复显示,匹配不成功的不会显示 [[email?protected] sed]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash onologinperator:x:11:0:operator:/root:/sbin/nologin ? [[email?protected] sed]# sed -n '/10+9/'p x.txt 匹配在1和9中间有1-n个0的情况 109 1009 10009 10109 1010109 193413410109 [[email?protected] sed]# sed -nr '/10+9/'p x.txt –r参数可以使+等特殊符号不需要专门脱义字符脱义 109 1009 10009 10109 1010109 193413410109 匹配1次或多次+左侧的字符 ? [[email?protected] sed]# sed -nr '/o{2}/'p test.txt 匹配oo root:x:0:0:root:/root:/bin/bash rooooooooooot adm:x:3:4:adm:/var/adm:/soooobin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin boot booot boooot sync:x:5:0:sync:/sbin:/bin/syncoooo mail:x:8:12:mail:/var/spool/mail:/sbin/nologin onologinperator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ? [[email?protected] sed]# sed -nr? '/root|lpd/'p test.txt 匹配root或lpd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin onologinperator:x:11:0:operator:/root:/sbin/nologin ? 打印指定的行 [[email?protected] sed]# sed -n '2'p test.txt 打印第2行 bin:x:1:1:bin:/bin:/sbin/NOLOGIN [[email?protected] sed]# sed -n '2,5'p test.txt 打印第2到5行 bin:x:1:1:bin:/bin:/sbin/NOLOGIN dfjfjpwejr.odro.d daemon:x:2:2:daemon:/sbin:/sbin/nologin rooooooooooot [[email?protected] sed]# sed -n '2,$'p test.txt 打印第2行到最后一行 bin:x:1:1:bin:/bin:/sbin/NOLOGIN dfjfjpwejr.odro.d daemon:x:2:2:daemon:/sbin:/sbin/nologin rooooooooooot adm:x:3:4:adm:/var/adm:/soooobin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin … [[email?protected] sed]# sed -n '1,$'p test.txt 打印全部内容 ? -e 支持在一个sed命令中执行多个操作 [[email?protected] sed]# sed -e '1'p -e '/bus/'p -n test.txt root:x:0:0:root:/root:/bin/bash dbus:x:81:81:System message bus:/:/sbin/nologin [[email?protected] sed]# sed -e '/lp/'p -e '/lpd/'p -n test.txt lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 执行多个操作时,匹配一次打印一次 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ? 9.5 sed(下) ? [[email?protected] sed]# sed -n '/test/Ip' test.txt 加大写i参数,匹配时不区分大小写 adm:otestx:3:4:adm:/var/adm:/soooobin/nologin TEST ? 不显示文件中指定的行,并打印剩余的行 [[email?protected] sed]# wc -l test.txt 26 test.txt [[email?protected] sed]# sed '1,10'd test.txt 不显示1-10行,打印剩下的行 booot boooot sync:x:5:0:sync:/sbin:/bin/syncoooo 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 onologinperator: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 postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin [[email?protected] sed]# wc -l test.txt 26 test.txt 此时不会直接删除指定的行,但这些行不会出现在屏幕上,剩下的行会被打印到屏幕上 ? -i 在文件中彻底删除指定的行 [[email?protected] sed]# wc -l test.txt 26 test.txt [[email?protected] sed]# sed -i '1,10'd test.txt [[email?protected] sed]# wc -l test.txt 16 test.txt ? 删除与lpd有关的行 [[email?protected] sed]# sed -i '/lpd/'d test.txt [[email?protected] sed]# sed -n '/lpd/'p test.txt ? 替换 ? 将 [[email?protected] sed]# sed? '1,10s/root/toor/g' test.txt booot boooot sync:x:5:0:sync:/sbin:/bin/syncoooo shutdown:x:6:0:shutdown:/sbitoorn:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mailtoor:/sbin/nologin onologinperator:x:11:0:operator:/toor:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobotoordy:x:99:99:Nobody:/:/sbin/nologin rootsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 第11行开始root不再被替换 rootdbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/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:998:996::/var/lib/chrony:/sbin/nologin ? 将r后跟1到n个o的字符串替换为r [[email?protected] sed]# sed -r '1,10s/ro+/r/g' test.txt booot boooot sync:x:5:0:sync:/sbin:/bin/syncoooo shutdown:x:6:0:shutdown:/sbirtn:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mailrt:/sbin/nologin onologinperator:x:11:0:operator:/rt:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobortdy:x:99:99:Nobody:/:/sbin/nologin rootsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin rootdbus:x:81:81:System message bus:/:/sbin/nologin … ? 将文件中第一段内容与最后一段内容交换 [[email?protected] sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/3:2:1/' booot boooot /bin/syncoooo:x:5:0:sync:/sbin:sync /sbin/shutdown:x:6:0:shutdown:/sbirootn:shutdown /sbin/halt:x:7:0:halt:/sbin:halt /sbin/nologin:x:8:12:mail:/var/spool/mailroot:mail /sbin/nologin:x:11:0:operator:/root:onologinperator /sbin/nologin:x:12:100:games:/usr/games:games /sbin/nologin:x:14:50:FTP User:/var/ftp:ftp /sbin/nologin:x:99:99:Nobody:/:noborootdy 前面用小括号括起来的后面要用+数字表示 ? 使用脱义字符 [[email?protected] sed]# head test.txt|sed 's//sbin/nologin/123/g' 由于/有特殊含义,无法识别为一般字符,需要脱义 sed:-e 表达式 #1,字符 9:“s”的未知选项 [[email?protected] sed]# head test.txt|sed 's//sbin/nologin/123/g'? or [[email?protected] sed]# head test.txt|sed '[email?protected]/sbin/[email?protected]@g' 或者为了消除歧义,将命令的/替换为@ … mail:x:8:12:mail:/var/spool/mailroot:123 onologinperator:x:11:0:operator:/root:123 games:x:12:100:games:/usr/games:123 ftp:x:14:50:FTP User:/var/ftp:123 noborootdy:x:99:99:Nobody:/:123 ? 将文件中英文字母替换为空(删除字母) [[email?protected] sed]# head test.txt|sed 's/[a-zA-Z]//g' ? ? ::5:0::/:// ::6:0::/:// ::7:0::/:// ::8:12::///:// ::11:0::/:// ::12:100:://:// ::14:50: ://:// ::99:99::/:// ? 在所有行开头加固定字符串 [[email?protected] sed]# head test.txt|sed -r 's/(.*)/aaa:&/g'? or [[email?protected] sed]# head test.txt|sed -r 's/(.*)/aaa:1/g' aaa:booot aaa:boooot aaa:sync:x:5:0:sync:/sbin:/bin/syncoooo aaa:shutdown:x:6:0:shutdown:/sbirootn:/sbin/shutdown aaa:halt:x:7:0:halt:/sbin:/sbin/halt … (.*)可以用&代替,或者用1表示 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |