29_Linux基础-shell编程-awk-sed 注 :点击此处或下方
[ 文章目录 ] 以展开或折叠目录
awk
输入分隔符(-F、FS)、输出分隔符(OFS)
awk里引用shell变量
一. awk和shell变量交换的问题 awk和shell变量交换的问题
1、使用 -v选项
2、使用双引号,但是awk内部的$01 等 1等 1 等 符号前需要使用\转义
3、使用单引号,将变量引起来,然后前面加一个$符号再次引用变量的值,相当于取2次值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@cPen_A ~] [root@cPen_A ~] panjinhao [root@cPen_A ~] [root@cPen_A ~] panjinhao [root@cPen_A ~] panjinhao panjinhao …… panjinhao [root@cPen_A lianxi] awk -v var=$1 -F: '$1==var{print NR,$0}' /etc/passwd [root@cPen_A lianxi] 1 root:x:0:0:root:/root:/bin/bash [root@cPen_A lianxi] 21 sanchuang:x:1000:1000::/home/sanchuang:/bin/bash [root@cPen_A lianxi] [root@cPen_A lianxi] [root@cPen_A lianxi] zhangjie_123 12358 [root@cPen_A lianxi] [root@cPen_A lianxi] root 0 operator 11
二. 进程和进程之间通信的方式 1、共享内存
2、信号量
3、信号
4、管道
5、队列
6、Socket
1 2 3 4 5 6 7 [root@cPen_A lianxi] 第2个字段:密码字段 *操作系统自带的,没有密码的 !!用户建的,没有密码的 提示:密码字段为*、!!表示没有设置密码;密码字段为空说明密码被清除。 [root@cPen_A lianxi]
三. awk内置函数 awk内置的函数:
length()
int()
sqrt()
system()
String Functions
sub()
index()
length()
split()
Numeric Functions
yum install python3 安装python3
1 2 3 4 5 6 7 8 [root@cPen_A lianxi] 0.237788 [root@cPen_A lianxi] 23.7788 [root@cPen_A lianxi] 23
四. 流控 流控:流程控制 control flow
for
while
case
if
1 2 3 4 5 6 7 8 9 10 11 if 语句单分支 [root@cPen_A lianxi] bin:x:1:1:bin:/bin:/sbin/nologin [root@cPen_A lianxi] bin:x:1:1:bin:/bin:/sbin/nologin 双分支 [root@cPen_A lianxi] 不符合要求 bin:x:1:1:bin:/bin:/sbin/nologin
1 2 3 4 5 6 7 8 9 10 11 12 13 /etc/passwd $3 是uid 用户的编号如果用户的编号是0 --> 管理员 1~999 --> 程序用户 大于1000 --> 普通用户 最后统计出有多少管理员,多少程序用户,多少普通用户? ----------------------------------------------------- [root@cPen_A ~] root 管理员 bin 程序用户 …… 管理员1 程序用户25 普通用户40
五. awk的for循环、数组
awk难点:
正则表达
if
内置函数
内置变量
for,数组array
六. sed sed是什么?what --> text stream editor 有什么用?where how --> 修改和替换文本 --> modify and substitute
sed是一种支持正则表达式的非交互式流编工具(stream editor)
脚本中修改文本或者文本替换的最佳工具
交互式:一问一答。比如python3里敲命令
2个空间 pattern space --> 处理数据的地方 --> 处理一行数据后,模式空间会清空 hold space --> 临时存放数据的地方
把pattern space放到hold space 命令:h、H
把hold space放到pattern space 命令:g、G
#注:性能意识,sed在内存里运行,比磁盘速度快
#注:容量意识
1 2 3 4 [root@cPen_A lianxi] [root@cPen_A lianxi]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@cPen_A lianxi] 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync :x:5:0:sync :/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin [root@cPen_A lianxi] 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync :x:5:0:sync :/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin
sed的p命令示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 = :输出行号 p命令输出的时候: 连续的行 [root@localhost lianxi] 不连续的行 [root@localhost lianxi] 示例:sed的p命令示例 sed -n ‘行号1,行号2p’ 输出文件 [root@localhost lianxi] 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 [root@localhost lianxi] 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 7 …… 14 [root@localhost lianxi] [root@localhost lianxi] 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync :x:5:0:sync :/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin [root@localhost lianxi] 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin [root@localhost lianxi] 1 root:x:0:0:root:/root:/bin/bash 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11 games:x:12:100:games:/usr/games:/sbin/nologin 13 nobody:x:99:99:Nobody:/:/sbin/nologin 15 dbus:x:81:81:System message bus:/:/sbin/nologin 17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 19 chrony:x:998:996::/var/lib/chrony:/sbin/nologin 21 chenpeng:x:1001:1001::/home/chenpeng:/bin/bash 23 nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost lianxi] 2 bin:x:1:1:bin:/bin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 6 sync :x:5:0:sync :/sbin:/bin/sync 8 halt:x:7:0:halt:/sbin:/sbin/halt 10 operator:x:11:0:operator:/root:/sbin/nologin 12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin 18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin 20 mysql:x:1000:1000::/home/mysql:/sbin/nologin 22 redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin [root@localhost lianxi] [root@localhost lianxi] [root@localhost lianxi] 6 sync :x:5:0:sync :/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin [root@localhost lianxi] 6 sync :x:5:0:sync :/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin ---------------------------------------------------------- [root@localhost lianxi] root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi] root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi] root:x:0:0:root:/root:/bin/bash chenpeng:x:1001:1001::/home/chenpeng:/bin/bash [root@localhost lianxi] [root@localhost lianxi] [root@localhost lianxi] [root@localhost lianxi] [root@localhost lianxi] /dev/mapper/centos-root 17G 9.9G 7.2G 58% / [root@localhost lianxi] /dev/mapper/centos-root 17G 9.9G 7.2G 58% / [root@localhost lianxi] [root@localhost lianxi]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 题目:截取nginx的access.log文件里3月18号15:30:00 -- 16:48:10时间段内的所有访问日志 [root@cPen_A lianxi] [root@cPen_A lianxi] [root@cPen_A nginx] 192.168.0.17 - - [09/Jan/2021:16:36:03 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "http://192.168.0.118/" "Mozilla/5.0 (Linux; Android 10; PCT-AL10; HMSCore 5.1.0.300; GMSCore 20.26.14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 HuaweiBrowser/11.0.5.304 Mobile Safari/537.36" "-" [root@cPen_A nginx] /var/log/nginx [root@cPen_A nginx] access.log access.log-20201202.gz error.log error.log-20201202.gz [root@cPen_A nginx] 13 Windows NT 10.0; WOW64 4 Linux; Android 10; PCT-AL10; HMSCore 5.1.0.300; GMSCore 20.26.14 --------------------------------------------------------------------------- [09/Jan/2021:16:32:46 +0800] --> 09/Jan/2021:16:32:46 [09/Jan/2021:16:33:07 +0800] --> 09/Jan/2021:16:32:46 [root@cPen_A nginx] [root@cPen_A nginx] 0[1-9]|[1-5][0-9]
sed的d命令示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 sed的d命令示例 删除操作可以根据行号和匹配模式进行操作 [root@cPen_A nginx] [root@cPen_A lianxi] [root@cPen_A lianxi] sed查找方式: 1、根据行号 2、根据模式 -->正则表达式=字符+特殊符号 3、根据字符串 [root@cPen_A lianxi] [root@cPen_A lianxi] [root@cPen_A lianxi] [root@cPen_A lianxi] [root@cPen_A lianxi] sed的命令: p d a i s c r w