Linux三剑客grep-sed-awk

linux三剑客-grep、sed、awk

文章目录

        • linux三剑客-grep、sed、awk
          • 1.正则表达式
            • 1.1正则表达式?
            • 1.2应用场景?-谁可以用?
            • 1.3正则注意事项(避免90%以上的坑)
            • 1.4正则符号
            • 1.5正则VS通配符
          • 2.基础正则
            • 2.1 ^ 以...开头的行
            • 2.2 $ 以...结尾的行
            • 2.3 ^$ 空行
            • 2.4 . (点) 任意一个字符
            • 2.5 \ 转义字符 -脱掉马甲打回原形,去除原有特殊含义
            • 2.6 * 前一个字符连续出现0次或者0次以上
            • 2.7 .* 所有内容、任何内容、任意内容
            • 2.8 灵异的2* 8*
            • 2.9 [] [abc] 1次匹配任何一个字符(a或b或c)
            • 2.10 [^] \[^abc] 取反,排除 排除a或b或c .匹配a或b或c以外的内容
          • 基础正则小结
          • 3.扩展正则
            • 3.1 + 前一个字符连续出现1次或者1次以上
          • 4.三剑客sed
            • 4.1 特点及格式
            • 4.2 sed命令执行过程
            • 4.3 sed核心应用
            • sed -增加 cai
            • sed - 替换 s
            • sed-后向引用(反向引用)
          • 5. awk
            • awk特点与应用场景
            • awk执行过程
            • awk中的行与列
            • 1)取行
            • 2)awk取列
            • 小结
            • awk的内置变量
            • awk模式匹配
            • 1)比较表达式-参考上边取行部分
            • 2)正则
            • 3)表示范围
            • 4)特殊模式BEGIN{} 和END{}
            • awk数组
            • awk数组

1.正则表达式
1.1正则表达式?
- 匹配有规律的东西:手机号、身份证号、匹配日志
- 正则表达式就出来了,regular expression(RE)
- 使用一些符号表达重复出现、大小写、开头/结尾含义
1.2应用场景?-谁可以用?
正则表达式linux三剑客使用,开发语言(Python,Java,golang)
应用场景过滤有规律的内容,尤其是日志
1.3正则注意事项(避免90%以上的坑)
  • 所有的符号都是英文符号

  • 学习正则通过grep命令学习,grep加上单引号

  • 给grep egrep加上颜色 ‘alias grep =‘grep --color=auto’’

  • 注意系统的字符集:en_US.UTF-8(大部分情况没问题),如果出现问题修改字符集为C:export LANG=C

  • 快速掌握正则:配合grep -o 参数学习

    1.4正则符号
基础正则^ $ ^$ . * .* [a-z] [^abc](取反,匹配任何不在方括号内指定的单个字符)
扩展正则+ | () {} ?
1.5正则VS通配符
分类诞生目标(用途)支持的命令
正则三剑客、高级语言、进行过滤(匹配字符)三剑客grep,sed,awk,find,rename(ubuntu)
通配符(pathname extension 或者globa)匹配文件(文件名)*.txt *.log {1…10}linux下面大部分命令都可以支持
2.基础正则
环境准备:
[root@oldboyedu oldboy]# cat oldboy.txt 
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya
2.1 ^ 以…开头的行
案例:以my开头的行
[root@oldboyedu oldboy]# grep '^my' oldboy.txt    
my blog is http: blog.51cto.com 
my qq num is 593528156 

在这里插入图片描述

2.2 $ 以…结尾的行
案例:以156结尾的行
[root@oldboyedu oldboy]# grep '156$' oldboy.txt 
my qq num is 593528156

在这里插入图片描述

cat -A file 	#显示文件中隐藏的标记
[root@oldboyedu oldboy]# cat -A oldboy.txt 
I am lizhenya teacher!$
I teach linux.$
test$
$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http: blog.51cto.com $
our site is http:www.lizhenya.com $
our site is http:www.lizhenua.com $
my qq num is 593528156$
$
aaaa,$
not 572891888887.$
^^^^^^^^66$$$$$$$^^^$$$
lizhenyalizhenyalizhenya$

在这里插入图片描述

案例:显示以m 结尾的行
[root@oldboyedu oldboy]# grep 'm $' oldboy.txt 
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 

在这里插入图片描述

2.3 ^$ 空行
  • 空行 这一行没有任何内容
案例:过滤出空行
[root@oldboyedu oldboy]# grep -n '^$' oldboy.txt 
4:
10:
  • 企业中案例:
排除空行
[root@oldboyedu oldboy]# grep -v '^$' oldboy.txt 
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
2.4 . (点) 任意一个字符
  • 注意 . 不匹配空行
[root@oldboyedu oldboy]# grep '.' oldboy.txt 
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya

在这里插入图片描述

2.5 \ 转义字符 -脱掉马甲打回原形,去除原有特殊含义
  • 匹配出以 . 结尾的行
[root@oldboyedu oldboy]# grep '\.$' oldboy.txt 
I teach linux.
not 572891888887.

在这里插入图片描述

  • 转义字符序列
    • \n 回车键
    • \t tab键
2.6 * 前一个字符连续出现0次或者0次以上
案例:8连续出现0次或者0次以上
[root@oldboyedu oldboy]# grep '8*' oldboy.txt 
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya

在这里插入图片描述

[root@oldboyedu oldboy]# grep '\^*' oldboy.txt 
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$

在这里插入图片描述

2.7 .* 所有内容、任何内容、任意内容
  • 整体记忆 . 表示所有*
  • 理解:.表示任意一个字符 * 表示前一个字符连续出现0次或者0次以上
匹配全部内容
[root@oldboyedu oldboy]# grep '.*' oldboy.txt 
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya

在这里插入图片描述

案例:
[root@oldboyedu oldboy]# grep '^.*t' oldboy.txt 
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
not 572891888887.

在这里插入图片描述

案例:任意开头到第一个o结束的行
  • 正则表达式特色:正则表达式的贪婪性。*表示所有或者*连续出现的时候表现出尽可能贪婪匹配
2.8 灵异的2* 8*
  • 为什么多匹配了内容?
[root@oldboyedu oldboy]# grep '8*' oldboy.txt 
I am lizhenya teacher!
I teach linux.
testI like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya## 8* 表示数字8出现了0次或者是0次以上。出现0次意思是什么都没有,这时候会把所有内容显示出来
2.9 [] [abc] 1次匹配任何一个字符(a或b或c)
[root@oldboyedu oldboy]# grep '[abc]' oldboy.txt 
I am lizhenya teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
aaaa,
lizhenyalizhenyalizhenya[a-z]	#所有小写字母
[A-Z]	#大写字母
[0-9]	#数字
[a-Z0-9] #所有大小写字母和数字
grep -i [a-z0-9] #所有大小写字母和数字
案例:匹配文件中的大小写字母和数字
[root@oldboyedu oldboy]# grep '[a-zA-Z0-9]' oldboy.txt 
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya
  • [a-z|A-Z|0-9] 匹配大小写字母和数字和|
2.10 [^] [^abc] 取反,排除 排除a或b或c .匹配a或b或c以外的内容
案例:除了a或b或c以外的内容
[root@oldboyedu oldboy]# grep '[^abc]' oldboy.txt 
I am lizhenya teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 
our site is http:www.lizhenya.com 
our site is http:www.lizhenua.com 
my qq num is 593528156
aaaa,
not 572891888887.
^^^^^^^^66$$$$$$$^^^$$
lizhenyalizhenyalizhenya

在这里插入图片描述

基础正则小结
基础正则含义搭配
^以…开头
$以…结尾
^$空行固定搭配^$
.任意字符
*前一个字符连续出现0次或者0次以上
.*所有内容固定搭配 .*
\转义字符 \n \t
[]匹配[]内任意单个字符[abc](a或b或c)[]与+搭配
[^]取反。 ^ 符号在方括号 [] 内时表示取反。匹配任何不在方括号内指定的字符集合中的单个字符
正则贪婪性正则表达式的特点 .* 或连续出现
3.扩展正则
符号
+
|
()
{}
3.1 + 前一个字符连续出现1次或者1次以上

4.三剑客sed
4.1 特点及格式
  • sed stream editor 流编辑器,sed把处理的内容(文件),当做是水源源不断地进行处理,直到文件末尾
  • sed格式
命令选项(参数)(s)替换 sed命令功能(g)修饰符文件
sed-r‘s#oldboy#oldgirl#g’oldboy.txt
  • sed命令的核心功能
功能
s替换substitute sub
p显示 print
d删除DELETE
cai增加c/a/i
4.2 sed命令执行过程

找谁,干啥

  • 找谁:哪一行
  • 干啥:增删改查
4.3 sed核心应用

sed-查找 p

查找格式
‘2p’指定行查找
‘1,5p’指定行号范围进行查找
‘/lidao/p’类似于grep过滤,//里面可以写正则
‘//,//p’表示范围的过滤。找日志用
  • 指定行号
#指定行号查找 
[root@oldboyedu ~]# sed -n '3p' oldboy.txt 
103,李导996,COO#sed -n 取消默认输出
[root@oldboyedu ~]# sed -n '3p' oldboy.txt 
103,李导996,COO
[root@oldboyedu ~]# sed '3p' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO#sed 指定行号范围
[root@oldboyedu ~]# sed -n '1,3p' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO[root@oldboyedu ~]# sed -n '3,6p' oldboy.txt 
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO#sed 从第4行到最后一行
[root@oldboyedu ~]# sed -n '4,$p' oldboy.txt 
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
  • 过滤
#过滤包含oldboy
[root@oldboyedu ~]# sed -n '/oldboy/p' oldboy.txt 
101,oldboy,CEO#过滤包含10
[root@oldboyedu ~]# sed -n '/10/p' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO#过滤包含4或5
[root@oldboyedu ~]# sed -n '/[45]/p' oldboy.txt 
104,yy,CFO
105,feixue,CIO#表示范围过滤。包含102到105的行
[root@oldboyedu opt]# sed -n '/102/,/105/p' oldboy.txt 
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
  • 实际生产环境日志统计
禁用cat/vim
使用head/tail/less/more/sed/grep

sed 删除d delete

删除格式
‘2d’指定行删除
‘1,5d’指定行号范围删除
‘/lidao/d’过滤删除
‘/11:00/,/12:00/d’过滤区间范围删除
#常见删除
#1.指定行删除:
[root@oldboyedu ~]# cat 1.txt 
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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#删除第2行
[root@oldboyedu ~]# sed '3d' 1.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#删第3行
[root@oldboyedu ~]# sed '2d' 1.txt 
1 root:x:0:0:root:/root:/bin/bash
3 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@oldboyedu ~]# sed '2,3d' 1.txt 
1 root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin#过滤删除包含xx的行。整行删除
[root@oldboyedu opt]# cat oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO[root@oldboyedu opt]# sed '/lidao/d' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
sed -增加 cai
命令含义
creplace 替代这行的内容
aappend 向指定的行或每一行追加内容 相当于>> (行的后面)
iinsert 插入 向执行的行或者是每行插入内容 (这一行的前面)
[root@oldboyedu ~]# cat oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@oldboyedu ~]# 
[root@oldboyedu ~]# 
[root@oldboyedu ~]# 
[root@oldboyedu ~]# sed '3a 996,lidao996,UFO' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
996,lidao996,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO[root@oldboyedu ~]# sed '3i 996,lidao996,UFO' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
996,lidao996,UFO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@oldboyedu ~]# sed '3c 996,lidao996,UFO' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
996,lidao996,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
  • 企业案例:向文件中追加多行内容
向sshd_config 里面追加
UseDNS no
GSSAPIAURCARION no
PermintRootLogin no#方法一:
cat  >>config<<'EOF'
UseDNS no
GSSAPIAURCARION no
PermintRootLogin no
EOF#方法二:sed
sed '$a UseDNS no\nGSSAPIAURCARION no\nPermintRootLogin no' config
#在config文件的最后一行增加
UseDNS no
GSSAPIAURCARION no
PermintRootLogin no
#这三行内容 \n 是换行
sed - 替换 s
  • s–> sub substitute 代替 替换
  • g—> global 全局替换,sed去替换所有匹配的内容,不带g的话sed默认只替换每行第一个匹配的内容
替换格式
s###g 第一个和第二个#之间支持正则
s@@@g
s///g
[root@oldboyedu ~]# cat oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@oldboyedu ~]# 
[root@oldboyedu ~]# sed 's#[0-9]##g' oldboy.txt
,oldboy,CEO
,zhangyao,CTO
,李导,COO
,yy,CFO
,feixue,CIO
,lidao,COCO[root@oldboyedu ~]# sed 's#[0-9]##' oldboy.txt
01,oldboy,CEO
02,zhangyao,CTO
03,李导996,COO
04,yy,CFO
05,feixue,CIO
10,lidao,COCO
sed-后向引用(反向引用)
  • 口诀:先保护,再使用
[root@oldboyedu ~]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>                                   先保护,再使用sed -r 支持扩展正则
\1 代表前边()括起来的内容
案例2:
[root@oldboyedu ~]# echo oldboy_lidao |sed -r 's#(^.*)_(.*)#\1_\2#g'
oldboy_lidao
[root@oldboyedu ~]# echo oldboy_lidao |sed -r 's#(^.*)_(.*)#\2_\1#g'
lidao_oldboy
案例:取网卡的IP地址
ip a s eth0  # ip addr show eth0[root@oldboyedu ~]# ip a s eth0 |sed -n '3p'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@oldboyedu ~]# 
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p' |sed -r s#(^.*t )(.*)(/.*$)#\1#g
-bash: syntax error near unexpected token `('
[root@oldboyedu ~]# 
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p' |sed -r s#(^.*t )(.*)(/.*$)#\1#g
-bash: syntax error near unexpected token `('
[root@oldboyedu ~]# 
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p'inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@oldboyedu ~]# 
#取出第一组里的
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*$)#\1#g'inet 
#取出第二组里的
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*$)#\2#g'
10.0.0.200#取出第三组里的
[root@oldboyedu ~]# ip a s eth0 |sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*$)#\3#g'
/24 brd 10.0.0.255 scope global eth0#精简命令取出IP地址:
[root@oldboyedu ~]# ip a s eth0 |sed -rn '3s#^.*t (.*)/.*$#\1#gp'
10.0.0.200
#案例:取权限
[root@oldboyedu ~]# stat /etc/hostsFile: ‘/etc/hosts’Size: 182       	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 16814892    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-05-19 20:21:54.018999440 +0800
Modify: 2024-03-12 21:33:41.216339940 +0800
Change: 2024-03-12 21:33:41.216339940 +0800Birth: -[root@oldboyedu ~]# stat /etc/hosts |sed -n 4p
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)[root@oldboyedu ~]# stat /etc/hosts |sed -n 4p |sed -r 's#^.*\(0(.*)(/-.*$)#\1#g'
644# 精简命令:
[root@oldboyedu ~]# stat /etc/hosts |sed -rn '4s#^.*\(0(.*)(/-.*$)#\1#gp'
644
5. awk
awk特点与应用场景
awk
一门语言,类似C语言
过滤,统计,计算
过滤,统计日志
awk执行过程
awk -F , 'BEGIN{print "name"}{print $2}{print "end of file"}' oldboy.txt

在这里插入图片描述

[root@sanjk tmp]# awk -F , 'BEGIN{print "name"}{print $2}{print "end of file"}' oldboy.txt
name
oldboy
end of file
zhangyao
end of file
李导996
end of file
yy
end of file
feixue
end of file
lidao
end of file
awk中的行与列
名词awk中叫法一些说明
记录record每一行默认通过回车分隔的
字段,域 field每一列默认通过空格分隔的
awk中的行和列结束标记都是可以修改的。
1)取行
awk
NR==1取出一行
NR>=1&&NR<=5取出1到5行
/oldboy/过滤
/101/,/105/范围
符号> < >= <= == !=
[root@sanjk tmp]# awk 'NR==1' oldboy.txt 
#找谁{干啥}
101,oldboy,CEO
[root@sanjk tmp]# awk 'NR>=1 && NR<=5' oldboy.txt
#找谁{干啥}
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
[root@sanjk tmp]# awk '/oldboy/' oldboy.txt 
101,oldboy,CEO
[root@sanjk tmp]# awk '/101/,/105/' oldboy.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,李导996,COO
104,yy,CFO
105,feixue,CIO
2)awk取列
  • -F 指定分隔符。指定每一列结束标记(默认是空格,连续的空格,tab键)
  • 数字表示取出某一列,注意在awk中数字 表示取出某一列,注意在awk中数字表示取出某一列,注意在awk内容就一个意思:表示取出某一列
  • $0 表示整行的内容,
  • {print xxx}
  • $NF 表示最后一列
[root@sanjk tmp]# ls -l
total 8
-rwxr-xr-x 1 root root  2 Jun  3 19:13 config
-rw-r--r-- 1 root root 91 Apr  6 17:33 oldboy.txt
drwx------ 2 root root  6 Jun  3 17:21 vmware-root_766-2990744190
drwx------ 2 root root  6 Jun  3 17:18 vmware-root_793-4248746047
[root@sanjk tmp]# 
[root@sanjk tmp]# ls -l |awk '{print $5}'2
91
6
6
[root@sanjk tmp]# ls -l |awk '{print $5,$9}' |column -t
2   config
91  oldboy.txt
6   vmware-root_766-2990744190
6   vmware-root_793-4248746047
[root@sanjk tmp]# ls -l |awk '{print $5,$NF}'8
2 config
91 oldboy.txt
6 vmware-root_766-2990744190
6 vmware-root_793-4248746047
[root@sanjk tmp]# #取出passwd 第一列和最后一列
[root@sanjk tmp]# head -1 /etc/passwd |awk -F : '{print $1,$NF}'
root /bin/bash
[root@sanjk tmp]# head -5 /etc/passwd |awk -F : -vOFS=: '{print $NF,$5,$4,$3,$2,$1}'
/bin/bash:root:0:0:x:root
/sbin/nologin:bin:1:1:x:bin
/sbin/nologin:daemon:2:2:x:daemon
/sbin/nologin:adm:4:3:x:adm
/sbin/nologin:lp:7:4:x:lp
小结
  • 行与列 名称
  • awk 取行与取列,指哪打哪
  • 取出网卡IP地址
[root@sanjk tmp]# ip a s eth0|awk 'NR==3'inet 10.0.0.129/24 brd 10.0.0.255 scope global eth0
[root@sanjk tmp]# ip a s eth0|awk 'NR==3'|awk -F"[ /]+" '{print $3}'
10.0.0.129
[root@sanjk tmp]# ip a s eth0|awk -F"[ /]+" 'NR==3{print $3}'
10.0.0.129
awk的内置变量
内置变量
NRNumber of Record 记录号,行号
NFNumber of Field 每行有多个字段(列)$NF表示最后一列的内容
FS-F: === -v FS=: Field Separator 字段分隔符,每个字段结束标记
OFSOutput Field Separator 输出字段分隔符(awk显示每一列的时候每一列之间通过什么分隔,默认是空格)
awk模式匹配
  • awk -F"[ /]+" ‘NR==3{print $2}’
awk-F"[ /]"‘NR==3{print $2}’
命令选项‘条件{动作}’
‘找谁{干啥}’
‘模式{动作}’
‘pattern{action}’

1)比较符号: > < >= <= == !=

2)正则:

3)范围:表达式//,//

4)特殊条件:BEGIN和END

1)比较表达式-参考上边取行部分
2)正则
  • // 支持扩展正则
  • awk 可以精确到某一列,某一列中包含或者不包含…内容
  • ~ 包含
  • !~ 不包含
正则awk正则
^表示以…开头的行某一列的开头$3~/oldboy/
$表示以…结尾的行某一列的结尾$4~/lidao/
^$ 表示空行某一列是空的
#第三行是以1开头的行
[root@sanjk tmp]# head -5 /etc/passwd|awk -F : '$3~/^1/'
bin:x:1:1:bin:/bin:/sbin/nologin#找出第3列以2开头的行,并显示第1列,第3列和最后一列
[root@sanjk tmp]# awk -F: '$3~/^2/{print $1,$3,$NF}' /etc/passwd
daemon 2 /sbin/nologin#找出第3列以1或者2开头的行,并显示第1列,第3列和最后一列
[root@sanjk tmp]# awk -F: '$3~/^[12]/{print $1,$3,$NF}' /etc/passwd
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
operator 11 /sbin/nologin
games 12 /sbin/nologin
ftp 14 /sbin/nologin
systemd-network 192 /sbin/nologin
abrt 173 /sbin/nologin
test01 1000 /bin/bash
test02 1001 /bin/bash
oldboy 1002 /bin/bash
test05 1006 /sbin/nologin
oldboy02 1007 /bin/bash
oldboy1 1008 /bin/bash
3)表示范围
  • /哪里开始/,/哪里结束/ =常用=
  • NR1,NR5 从第一行开始到第5行结束 类似于‘sed -n ‘1,5p’’
#显示一定时间内的日志
[root@sanjk tmp]# awk '/21:44:03/,/21:44:12/' /var/log/secure |wc -l
4
[root@sanjk tmp]# awk '/21:44:03/,/21:44:12/{print $1}' /var/log/secure
Jun
Jun
Jun
Jun
4)特殊模式BEGIN{} 和END{}
模式含义应用场景
BEGIN{}里面的内容会在awk读取文件之前执行1)进行简单统计,计算,不涉及读取文件(常见)
2)处理文件之前
3)用来定义一些awk变量(很少用)
END{}里面的内容会在awk读取文件之后执行1)awk进行统计,一般过程:先进行计算,最后END里面输出结果(常见)
2)awk使用数组,用来输出属组结果(常见)
  • END统计计算
  • 统计方法:i++ i=i+1
统计方法简写应用场景
i++i=i+1计数,统计次数
sum =sum+?sum+=?求和累加
注意i,sum都是变量
#统计/etc/services里面有多少个空行
[root@sanjk tmp]# awk '/^$/{i++}END{print i}' /etc/services 
17
##seq 100 求和1+2+3...+100 awk实现
[root@sanjk tmp]# seq 100|awk '{sum=sum+$1}END{print sum}'
5050
##如果想查看过程怎么办?
[root@sanjk tmp]# seq 100|awk '{sum=sum+$1;print sum}END{print sum}'
awk数组
  • 统计次数:统计日志:类似于统计每个IP出现的次数,统计每种状态码出现的次数,统计系统中用户被攻击的次数。统计攻击者IP出现的次数。
  • 累加求和:统计日志中每个IP消耗的流量。。。。
shell数组awk数组
形式array[0]=oldboy array[1]=lidaoarray[0]=oldboy array[1]=lidao
使用echoarray[0]echoarray[0] echoarray[0]echoarray[1]print array[0] printarray[1]
         |
  • END统计计算
  • 统计方法:i++ i=i+1
统计方法简写应用场景
i++i=i+1计数,统计次数
sum =sum+?sum+=?求和累加
注意i,sum都是变量
#统计/etc/services里面有多少个空行
[root@sanjk tmp]# awk '/^$/{i++}END{print i}' /etc/services 
17
##seq 100 求和1+2+3...+100 awk实现
[root@sanjk tmp]# seq 100|awk '{sum=sum+$1}END{print sum}'
5050
##如果想查看过程怎么办?
[root@sanjk tmp]# seq 100|awk '{sum=sum+$1;print sum}END{print sum}'
awk数组
  • 统计次数:统计日志:类似于统计每个IP出现的次数,统计每种状态码出现的次数,统计系统中用户被攻击的次数。统计攻击者IP出现的次数。
  • 累加求和:统计日志中每个IP消耗的流量。。。。
shell数组awk数组
形式array[0]=oldboy array[1]=lidaoarray[0]=oldboy array[1]=lidao
使用echoarray[0]echoarray[0] echoarray[0]echoarray[1]print array[0] printarray[1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95095.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给某个conda环境安装CUDA 12.4版本 全局CUDA不变

文章目录&#x1f3af; 正确的安装命令&#x1f4cb; 为什么这个命令安全&#xff1f;⚠️ 重要说明&#x1f527; 安装后环境配置方法一&#xff1a;在虚拟环境中设置方法二&#xff1a;使用conda环境变量&#x1f9ea; 验证安装&#x1f4ca; 版本共存确认&#x1f4a1; 额外…

【C++】日期类实现详解:代码解析与复用优化

代码总览与总结// 实现一个完善的日期类 class Date { public:int GetMonthDay(int year, int month){int monthDays[13] { 0,31,28,31,30,31,30,31,31,30,31,30,31 };// 闰年2月if (month 2 && ((year % 4 0 && year % 100 ! 0) || year % 400 0))return …

零基础json入门教程(基于vscode的json配置文件)

一、什么是 JSON&#xff1f;—— 最核心的概念JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;长得像键值对的集合&#xff0c;用途是存储和传递数据。在 VS Code 中&#xff0c;它常被用来写配置文件&#xff08;比如调试配置…

深入对比分析SpringCloud和Dubbo两大微服务框架的核心架构与特性。

1 微服务架构演进与核心概念1.1 微服务架构的本质微服务架构是一种将单一应用程序划分为一组小型服务的方法&#xff0c;每个服务运行在自己的进程中&#xff0c;服务之间通过轻量级的通信机制进行协作。这些服务围绕业务能力构建&#xff0c;并能够独立部署到生产环境中。微服…

鸿蒙ArkTS 核心篇-14-条件表达式(三目运算符)

目录 根据逻辑条件结果&#xff0c;执行不同的表达式&#xff0c;得到不同结果 DevEco Studio代码实战 ctrl s 日志输出 总结 根据逻辑条件结果&#xff0c;执行不同的表达式&#xff0c;得到不同结果 DevEco Studio代码实战 let num1: number 100 let num2: number 20l…

CDH集成LDAP进行身份验证

前言&#xff1a;在内网环境中部署LDAP并在CDH的hive和impala中集成&#xff0c;其中配置的端口&#xff0c;镜像名&#xff0c;密码等需要根据自己情况进行更改 1、镜像下载 在有网络的服务器上下载镜像或直接下载&#xff0c;这里需要自行配置下docker镜像下载地址 # 下载…

并发编程:Java中的多线程与线程池!

全文目录&#xff1a;开篇语线程的基础概念线程生命周期线程调度线程安全线程池&#xff1a;Executor框架、线程池的管理与调优Executor框架线程池的管理与调优并发工具类&#xff1a;ReentrantLock、CountDownLatch、CyclicBarrier等ReentrantLockCountDownLatchCyclicBarrier…

语义分割一站式到底怎么玩?

语义分割模型&#xff0c;复现或改进、对比实验&#xff0c;&#xff0c;欢迎交流&#xff0c;完爆各种详细需求1、可以接以下语义分割模型dai做 DeepLabV3、PSPnet、HRnet、Segformer、Unet、u2net、cenet、erfnet、hcanet、hiformer、uiunet、nnunet、saunet、unext、dscnet、…

由于不对称GND过孔配置,差分信号过孔上的差模到共模转换

本文研究了靠近高速差分信号过孔的接地过孔的影响以及由此产生的差模到共模的转换。该工作显示了接地 &#xff08;GND&#xff09; 过孔和差分信号之间距离的影响 &#xff08;Diff. SIG.&#xff09;;GND过孔不对称配置的影响;介电厚度和平面之间跃迁次数的影响。 印刷电路板…

Axios 实例配置指南

今天分享一段 Axios 实例配置的代码&#xff0c;用于 Web Front - End 项目的构建。 一、为什么使用 Axios 在前端项目中&#xff0c;与后端进行数据交互是必不可少的。Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;它提供了简洁的 API 和强大的功能&#xff0c;能够方…

分分合合,门模块方案又兴起了

文章目录前言1.方案概述1.1 功能需求1.2 框图2.供电和通信2.1 理想二极管控制器2.2 SBC2.3 高边开关3.门模块PCBA3.1 后视镜3.2 车窗和电动门4.车锁控制PCBA5.氛围灯PCBA6.未来趋势前言 最近接触了一些之前做门锁、门控、BCM的客户&#xff0c;发现他们或多或少都在做一些门模…

AWD相关知识

AWD AWD&#xff1a;Attack With Defence&#xff0c;即攻防对抗&#xff0c;比赛中每个队伍维护多台服务器&#xff08;一般两三台&#xff0c;视小组参赛人数而定&#xff09;&#xff0c;服务器中存在多个漏洞&#xff08;web层、系统层、中间件层等&#xff09;&#xff0c…

基于CNN(卷积神经网络)的门牌号识别

1、官网下载SVHN数据集svhn是数据集&#xff0c;Dataset2、HOG特征3、支持向量机 SVM(Support Vector Machine&#xff0c;SVM) 分类器4、cv2需要导入 pip install opencv-python5、HOG特征提取5.1 伽马校正归一化预补偿反归一化无伽马校正有伽马校正5.2 灰度化5.3 图像梯度计…

使用LLAMA_cpp_python进行qwen2.5-vl-7b-instruct进行推理

目标&#xff1a;使用python的llama_cpp运行qwen2.5vl模型实现提交图片和文本回答文本效果 遇到的问题&#xff1a; 和提交信息的判断关键点llama.cpp 作为一个用 C/C 编写的轻量级大语言模型推理框架&#xff0c;让你能在各种硬件上高效运行模型。它通过降低部署和运行大模型的…

PDF,HTML,md格式文件在线查看工具

VUE3 实现了 PDF,HTML,md格式文件在线查看工具 在线体验地址: http://114.55.230.54/ 实现了一款漂亮的PDF,HTML,md格式文件在线查看网页工具 1、PDF预览1.1 实现代码 <script setup> import { ref, watch, computed } from vue// 状态管理 const files ref([]) // 存储…

CPP学习之map和set

1. 关联式容器 在之前博客中我们提到过序列式容器&#xff1a;vector, list, deque, forward_list等&#xff0c;其底层都是线性数据结构。 关联式容器存储的是键值对–<key, value>&#xff0c;与序列式容器仅存储值–key不一样&#xff0c;在数据检索时比序列式容器效…

深入理解C++中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景

技术博客&#xff1a;深入理解C中的移动赋值与拷贝赋值函数——兼论移动构造函数及其实际应用场景引言在C编程中&#xff0c;对象的赋值和构造操作是常见的需求。随着C11标准的引入&#xff0c;移动语义&#xff08;Move Semantics&#xff09;成为提升程序性能的重要手段之一。…

免费在线图片合成视频工具 ,完全免费

免费在线图片合成视频工具 &#xff0c;完全免费 免费在线图片合成视频工具是一个完全免费的图片生成视频网站、图片和音乐合成视频网站。 它完全免费&#xff0c;无需注册登录&#xff0c;可以轻松将多张图片转换为视频&#xff0c;支持 jpeg 、png 、webp 格式图片&#xf…

金仓数据库 V9 体验测评:AI 时代国产数据库 “融合” 架构的真实观察

【非广告声明】本文为本人基于金仓数据库 V9 的真实部署测试与技术拆解&#xff0c;无任何商业合作背景&#xff0c;未接受品牌方任何形式的推广委托或费用支持。写作核心是分享国产数据库在 “融合架构”“AI 赋能”“平滑迁移” 等关键场景下的实际使用体验 —— 包括技术细节…

EE进阶1:Maven和SpringBoot基本介绍

Maven什么是mavenMaven简单的理解就是一个项目管理工具&#xff0c;使用pom.xml文件进行管理和获取.jar包&#xff0c;而不用手动进行添加.jar包。创建maven项目以及使用Maven的功能非常多&#xff0c;这里主要理解Maven的项目创建和依赖管理。项目创建&#xff1a;maven本身是…