其他分享
首页 > 其他分享> > RHCE_DAY04

RHCE_DAY04

作者:互联网

sed流式编辑器

#打印文件第一行内容
[root@localhost yunwei]# sed -n '1p' /etc/passwd
root:x:0:0:root:/root:/bin/bash

#打印文件第三行内容
[root@localhost yunwei]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#打印文件第3行到6行
[root@localhost yunwei]# sed -n '3,6p' /etc/passwd
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

#打印文件第3行到6行
[root@localhost yunwei]# head -6 /etc/passwd | tail -4
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

#利用正则表达式匹配以root开头的行(正则表达式要放在//内)
[root@localhost yunwei]# sed -n '/^root/p' /etc/passwd

#匹配以bash结尾的行
[root@localhost yunwei]# sed -n '/bash$/p' /etc/passwd
[root@localhost yunwei]# sed -n '/nologin$/p' /etc/passwd

#打印文件最后一行,打印行号
[root@localhost yunwei]# sed -n '$=' /etc/passwd
70
[root@localhost yunwei]# sed -n '/^root/=' /etc/passwd
1

#拷贝文件练习
[root@localhost opt]# cp /etc/passwd /opt/test

#删除文件2到4行
[root@localhost opt]# sed '2,4d' test | wc -l
67

#使用i选项直接修改源文件
[root@localhost opt]# sed -i '2,4d' test 

#使用分号分隔
[root@localhost opt]# sed -i '10d;12d' test
[root@localhost opt]# sed -n '$=' test
62

#制作素材
[root@localhost opt]# vim 1.txt 
aaaabbbbb
bbbbbaaaa
cccccaaaaa
dddddaaaa


[root@localhost opt]# sed -n '/aaaa/p' 1.txt
aaaabbbbb
bbbbbaaaa
cccccaaaaa
dddddaaaa

#取反删除
[root@localhost opt]# sed -i '/cccc/!d' 1.txt 
[root@localhost opt]# cat 1.txt 
ccccaaaa

[root@localhost opt]# vim 1.txt 
aaaabbbb
ddddaaaa
zzzzaaaa
ccccaaaa

#删除以ccc开头的行
[root@localhost opt]# sed -i '/^cccc/d' 1.txt
[root@localhost opt]# cat 1.txt 
aaaabbbb
ddddaaaa
zzzzaaaa

#删除空行
[root@localhost opt]# sed -i '/^$/d' 1.txt 
[root@localhost opt]# cat 1.txt 

#准备素材
[root@localhost opt]# vim xx.txt
2021 2020 2019 2018
2021 2021 2020 2019
2021 2022 2021 2020

#替换文件每一行匹配到的第一个字串
[root@localhost opt]# sed 's/2021/xxxx/' xx.txt 
xxxx 2020 2019 2018
xxxx 2021 2020 2019
xxxx 2022 2021 2020

#替换文件每一行匹配到的第二个字串
[root@localhost opt]# sed 's/2021/xxxx/2' xx.txt 
2021 2020 2019 2018
2021 xxxx 2020 2019
2021 2022 xxxx 2020

#替换文件每一行匹配到的所有指定字串
[root@localhost opt]# sed 's/2021/xxxx/g' xx.txt 
xxxx 2020 2019 2018
xxxx xxxx 2020 2019
xxxx 2022 xxxx 2020

#将匹配到的第一个字串替换成空
[root@localhost opt]# sed 's/2021//' xx.txt 
 2020 2019 2018
 2021 2020 2019
 2022 2021 2020
 
 #将匹配到的第=二字串替换成空
[root@localhost opt]# sed 's/2021//2' xx.txt 
2021 2020 2019 2018
2021  2020 2019
2021 2022  2020

#替换时屏蔽默认输出
[root@localhost opt]# sed -n 's/root/xxoo/g' test
[root@localhost opt]# sed -n 's/root/xxoo/gp' test
xxoo:x:0:0:xxoo:/xxoo:/bin/bash
operator:x:11:0:operator:/xxoo:/sbin/nologin

#替换符可以使用任意的特殊符号
[root@localhost opt]# sed  's#2021#xxoo#' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020
[root@localhost opt]# sed  's,2021,xxoo,' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020
[root@localhost opt]# sed  's!2021!xxoo!' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020
[root@localhost opt]# sed  's;2021;xxoo;' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020
[root@localhost opt]# sed  's*2021*xxoo*' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020
[root@localhost opt]# sed  's:2021:xxoo:' xx.txt 
xxoo 2020 2019 2018
xxoo 2021 2020 2019
xxoo 2022 2021 2020

#将文件中/bin/bash替换成/bin/sh
[root@localhost opt]# sed -n 's/\/bin\/bash/\/bin\/sh/gp' test
[root@localhost opt]# sed -n 's,/bin/bash,/bin/sh,gp' test

#使用sed给文件1-7行批量添加注释
[root@localhost opt]# sed -n '1,7s/^/#/p' test 

#使用sed给文件1-7行批量添加注释,直接修改源文件
[root@localhost opt]# sed -i '1,7s/^/#/p' test 

#批量去除1-7行的注释
[root@localhost opt]# sed -n '1,7s/^#//p' test

#批量去除1-7行的注释,直接修改源文件
[root@localhost opt]# sed -i '1,7s/^#//p' test

#将文件中所有的数字替换成空
[root@localhost opt]# sed -n 's/[0-9]//gp' test

#将文件中所有的英文字母替换成空
[root@localhost opt]# sed -n 's/[a-Z]//gp' test

#准备素材
[root@localhost opt]# vim a.txt
xxxxxxx
yyyyyyy
zzzzzz

#将a.txt文件内容导入到test文件中,默认读一行导一遍
[root@localhost opt]# sed 'r/opt/a.txt' test

#指定导入的行,导入到test文件第一行下边
[root@localhost opt]# sed '1r/opt/a.txt' test
root:x:0:0:root:/root:/bin/bash
xxxxxxx
yyyyyyy
zzzzzz

#指定连续导入的行
[root@localhost opt]# sed '1,3r/opt/a.txt' test
root:x:0:0:root:/root:/bin/bash
xxxxxxx
yyyyyyy
zzzzzz

root:x:0:0:root:/root:/bin/bash
xxxxxxx
yyyyyyy
zzzzzz

root:x:0:0:root:/root:/bin/bash
xxxxxxx
yyyyyyy
zzzzzz

#将a.txt文件第一行内容导出到b.txt文件中
[root@localhost opt]# sed '1w b.txt' a.txt
[root@localhost opt]# cat b.txt 
xxxxxxx

awk编程语言

#准备素材
[root@localhost opt]# vim test.txt
hello the woman
welcome to china

#打印文件的第一列
[root@localhost opt]# awk '{print $1}' test.txt 
hello
welcome

#打印文件第一列和第三列
[root@localhost opt]# awk '{print $1,$3}' test.txt 
hello woman
welcome china

#打印passwd文件第一列(默认没有空格与tab键作为分隔符,打印文件所有内容)
[root@localhost opt]# awk '{print $1}' /etc/passwd

#手动指定以:作为分隔,打印文件第一列
[root@localhost opt]# awk -F: '{print $1}' /etc/passwd

#打印文件第一列与第七列
[root@localhost opt]# awk -F: '{print $1,$7}' /etc/passwd

#通过[]集合匹配多种单个字符作为分隔符,打印用户名与解释器字段
[root@localhost opt]# awk -F[:/] '{print $1,$10}' /etc/passwd

#通过正则表达式过滤以root开头的行
[root@localhost opt]# awk -F: '/^root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

#通过正则表达式过滤以root开头的行,打印第1列与第7列
[root@localhost opt]# awk -F: '/^root/ {print $1,$7}' /etc/passwd
root /bin/bash

#打印文件每一行与每一行的列数
[root@localhost opt]# awk -F: '{print NR,NF}' /etc/passwd

#打印文件每一行与每一行的列数,并打印最后一列
[root@localhost opt]# awk -F: '{print NR,NF,$NF}' /etc/passwd

#通过常量打印执行的列
[root@localhost opt]# awk -F: '{print $1,"用户的解释器为:",$7}' /etc/passwd
root 用户的解释器为: /bin/bash

#匹配第一列包含root的行
[root@localhost opt]# awk -F: '$1~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

#排除第7列noloogin的行,打印第1列与第7列
[root@localhost opt]# awk -F: '$7!~/nologin/{print $1,$7}' /etc/passwd

#利用扩展正则过滤,以root或者adm开头的行,打印第1列与第7列
[root@localhost opt]# awk -F: '/^(root|adm)/{print $1,$7}' /etc/passwd
root /bin/bash
adm /sbin/nologin

awk使用数值/字符串比较设置条件

#打印行号等于3
[root@localhost opt]# awk 'NR==3{print}' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#使用sed更加方便打印某一行
[root@localhost opt]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

#打印文件中第3列大于等于1000,打印第1列,第3列,第7列
[root@localhost opt]# awk -F: '$3>=1000{print $1,$3,$7}' /etc/passwd
lisi 1000 /bin/bash

#打印文件中第三列小于1000,打印第1列,第3列,第7列
[root@localhost opt]# awk -F: '$3<1000{print $1,$3,$7}' /etc/passwd
root 0 /bin/bash

#打印文件中第3列大于500并且小于1000,打印第1列,第3列,第7列
[root@localhost opt]# awk -F: '$3>500 && $3<1000 {print $1,$3,$7}' /etc/passwd
polkitd 999 /sbin/nologin

#打印第一列不等于root的行
[root@localhost opt]# awk -F: '$1!="root"{print}' /etc/passwd

awk过滤时机:awk ‘BEGIN{指令} {指令} END{指令}’ 文件名

#BEGIN{指令}行前处理
[root@localhost opt]# awk 'BEGIN{print "正在处理中"}'
正在处理中

#定义变量
[root@localhost opt]# awk "BEGIN{x=10;print x}"
10

#四则运算
[root@localhost opt]# awk "BEGIN{x=10;print x+5}"
15
[root@localhost opt]# awk "BEGIN{x=10;print x+5}"
15
[root@localhost opt]# awk "BEGIN{x=10;print x-5}"
5
[root@localhost opt]# awk "BEGIN{x=10;print x*5}"
50
[root@localhost opt]# awk "BEGIN{x=10;print x/5}"
2

[root@localhost opt]# awk "BEGIN{print 10+10}"
20
[root@localhost opt]# awk "BEGIN{print 10-5}"
5
[root@localhost opt]# awk "BEGIN{print 10*2}"
20
[root@localhost opt]# awk "BEGIN{print 10/3}"
3.33333
[root@localhost opt]# awk "BEGIN{print 10%3}"
1

#通过awk统计系统里使用bash解释器的用户有什么个?
[root@localhost opt]# awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd
27
[root@localhost opt]# awk '/bash$/{x++}END{print x}' /etc/passwd
27

awk分支结构

#if单分支统计passwd文件中UID大于或等于1000的用户个数
awk  -F: '{if($3>=1000){x++}} END{print x}' /etc/passwd
if($3>=1000){x++}
[root@localhost ~]# awk -F: '{if($3>=1000){x++}}END{print x}' /etc/passwd

#if双分支统计passwd文件中UID大于等于1000的用户,和小于1000的用户个数
[root@localhost ~]# awk -F: '{if($3>=1000){i++} else{x++}} END{print i,x}' /etc/passwd

awk数组

#awk定义数组方式
[root@localhost ~]# awk 'BEGIN{x[0]=10;x[1]=20;print x[0],x[1]}'
10 20

#awk定义数组方式
[root@localhost ~]# awk 'BEGIN{x[0]++;print x[0]}'
1

awk循环结构

[root@localhost ~]# awk 'BEGIN{a[0]=00;a[1]=11;a[2]=22;for(i in a){print i,a[i]}}'
0 0
1 11
2 22
#通过awk打印剩余内存
[root@localhost opt]# free -h | grep Mem | awk '{print $4}'
134M
[root@localhost opt]# free -h | awk '/Mem/{print $4}'
134M

#用awk写一个监控脚本,监控网卡的进出口流量
[root@localhost ~]# vim while_liuliang.sh 
#!/bin/bash
while :
do
        clear
        ifconfig ens32 | awk '/inet /{print "IP:",$2}'
        ifconfig ens32 | awk '/RX p/{print "入口流量:",$5}'
        ifconfig ens32 | awk '/TX p/{print "出口流量:",$5}'
        sleep 0.1
done

#使用awk过滤系统根分区使用情况
[root@localhost ~]# df -h | grep '/$' | awk '{print $4}' | awk -FG '{print $1}'
51

#过滤根分区剩余空间与物理内存空间
[root@localhost ~]# vim df_free.sh
#!/bin/bash
df -h | grep '/$' | awk '{print "根分区剩余空间:",$4}'
free -h | grep Mem | awk '{print "物理内存剩余空间:", $4}'

#通过awk统计用户登录系统的次数
[root@localhost ~]# who | awk '{ip[$1]++}END{for(i in ip)print i,ip[i]}'
root 1

标签:opt,RHCE,DAY04,sed,awk,print,root,localhost
来源: https://www.cnblogs.com/KarlMarx/p/15126532.html