3.13 9.4-9.5听课笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.13 9.4-9.5听课笔记相关的知识,希望对你有一定的参考价值。
Sed
打印、匹配行
[[email protected] sed]# sed '/root/'p test.txt 用sed’匹配特定的字符
root:x:0:0:root:/root:/bin/bash 结果会显示文件中所有内容但匹配上的行会被连续打印两次
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
…
-n 不匹配的行不显示每行只显示一次
[[email protected] sed]# sed -n '/root/'p test.txt
root:x:0:0:root:/root:/bin/bash
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
[[email protected] sed]# sed -n '/r.t/'p test.txt
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[[email protected] sed]# sed -n '/r*t/'p test.txt
root:x:0:0:root:/root:/bin/bash
sh1outdown:x:6:o1o0:s1ohutd1ooown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/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
…
[[email protected] sed]# sed -n '/r\+t/'p test.txt 正常使用+需要脱义
[[email protected] sed]# sed -nr '/r+t/'p test.txt 加-r参数则不需要脱义
[[email protected] 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
sh1outdown:x:6:o1o0:s1ohutd1ooown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[[email protected] sed]# sed -nr '/root|bus/'p test.txt 或者
root:x:0:0:root:/root:/bin/bash
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
dbus:x:81:81:System message bus:/:/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
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
[[email protected] sed]# sed -n '5,$'p test.txt 打印第5行后所有的行
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/oaosbin:/bin/sync
sh1outdown:x:6:o1o0:s1ohutd1ooown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[[email protected] sed]# sed -n '1,$'p test.txt 打印全部内容
[[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 '1'p -e '/root/'p -n test.txt
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
operatorroooooado:x:11:0:operator:/root:/sbin/nologin
*-e一次执行多个项目,若显示的结果中存在重复的行则会重复显示
[[email protected] sed]# sed -n '/bus/'Ip test.txt 加I(大写i)不区分大小写
dbus:x:81:81:System message bus:/:/sbin/nologin
bus
BUS
Bus
Bus
删除指定行
案例:
需要删除一个庞大的日志文件中前几个月的内容,只留最后一个月(日志都含有时间戳)
[[email protected] sed]# egrep -n '#*2018.3.12|#*2018.3.13' aa
1:#######2018.3.12
11:#######2018.3.13
[[email protected] sed]# sed '2,10'd aa
#######2018.3.12
#######2018.3.13
fhuqieh
fdgda
dsgfa
rgqe
adga
*以上命令并没有直接删除文件aa中的内容,只是不会显示2-10行的内容,但对文件本身无任何修改
-I 彻底删除aa文件中对应的行
[[email protected] sed]# sed -i '2,10'd aa
[[email protected] sed]# cat aa
#######2018.3.12
#######2018.3.13
fhuqieh
fdgda
dsgfa
rgqe
adga
删除有hyc字段的行
[[email protected] sed]# sed -i '/hyc/'d passwd.bak
[[email protected] sed]# grep 'hyc' passwd.bak
[[email protected] sed]#
替换字符
[[email protected] sed]# sed '1,10s/root/toor/g' passwd.bak
toor:x:0:0:toor:/toor:/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
[[email protected] sed]# sed -r '1,10s/ro+/r/g' passwd.bak |head
rt:x:0:0:rt:/rt:/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:/rt:/sbin/nologin
*写替换内容时可以使用正则,但需要在sed后加-r选项才能识别正则
[[email protected] sed]# sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' bb
/bin/bash:x:0:0:root:/root:root
*将一行最后一个:后的内容与第一个:之前的内容替换
S表示替换行,默认未写明则替换所有行内容;
每个()内的内容都可以当做一个整体;
为()内的内容从左到右排序1、2、3;
第一个():一个或多个除:外的任意字符;
第二个():任意个任意字符
第三个():同第一个;
贪婪匹配:第二个()的内容表示任意个任意字符,它之后的:匹配的是每一行最后一次出现的:;
前面的([^:]+)在后面需要用\3表示
*/字符过多可能导致系统无法区分可用#或@代替,也可以在/前面加\脱义
删除文档中所有的英文字母
[[email protected] sed]# sed 's/[a-zA-Z]//g' bb 用空内容代替字母
::0:0::/://
在所有行的前面加字符串
[[email protected] sed]# sed -r 's/(.*)/aaa&/' bb
aaaroot:x:0:0:root:/root:/bin/bash
aaaoperator:x:11:0:operator:/root:/sbin/nologin
[[email protected] sed]# sed -r 's/(.*)/aaa\1/' bb
aaaroot:x:0:0:root:/root:/bin/bash
aaaoperator:x:11:0:operator:/root:/sbin/nologin
问题:
[[email protected] sed]# sed -r 's/(.*)/aaa\1/' a > a
[[email protected] sed]# cat a
[ro[email protected] sed]# sed -r 's/(.*)/aaa\1/' a.bak >> a.bak
[[email protected] sed]# cat a.bak
dgdarfagr
aaadgdarfagr
以上是关于3.13 9.4-9.5听课笔记的主要内容,如果未能解决你的问题,请参考以下文章