![21fbcd9a835abb131da156d3898fc5b9.png](https://i-blog.csdnimg.cn/blog_migrate/bc09adcc70f40e46c80b83b0f2e5b4fa.jpeg)
本文为霍格沃兹测试学院优秀学员课程学习系列笔记,希望大吉可以从中学到想学习的知识。
(本篇为继续上篇的内容)
结果展示:
(1)
(2)[sqavbxb9efockpz ~]$ awk '$9!~/200/{print $9}' nginx.log | sort | uniq -c | sort -nr
![b9f3173e778ea4688b1f53a957c586bf.png](https://i-blog.csdnimg.cn/blog_migrate/7a5946a4fb4c9fcbf2bb4a177dc5747d.jpeg)
再结合 awk ‘BBEGIN{}END{}’ 命令,以统计当前用户数目的例子来展示命令用法
使用
cat /etc/passwd
命令来查看本机用户,我们需要提取出用户名称并加上数字序号显示出来,达到这种效果:
![463e7f2966c9f19e1df36aa1825e0624.png](https://i-blog.csdnimg.cn/blog_migrate/cab1b28245f3ea133c60fc15a784d747.jpeg)
用户信息:
![53c3887a4f19e8e2bfb205ca78800ee1.png](https://i-blog.csdnimg.cn/blog_migrate/7a85b0d36dd1c27022d9afd528741d62.jpeg)
思路:
* awk运行前先定义序号索引0,用来递增保存用户
* 利用awk将用户提取出来,按索引分别保存;
* 切片结束后再按行数进行循环,将数字序号与第一步保存的信息拼接打印
* 注意:
cat /etc/passwd
打印出的结果中,最上方的注释需要处理跳过
![8e77c43747087ae7b32471c642b3d2a8.png](https://i-blog.csdnimg.cn/blog_migrate/234c9a61c2091612ec88787281db109f.jpeg)
3. sed
![0d95fb11d6f155385329d926f559005e.png](https://i-blog.csdnimg.cn/blog_migrate/7ba4fdbf2a6bb9dbb5b0ec7aaf81d98e.jpeg)
sed:stream editor 根据定位到的数据行修改数据
1、sed [-nefri] [动作]
2、参数:
3、-n :使用安静(slient)模式。只有经过sed特殊处理的那一行(或者操作)才会被列出来。一般与p配合使用
4、-e :直接在命令行模式上进行sed的动作编辑
5、-f :直接将sed动作写在一个文件内,-f filename则可以执行filename 内的sed动作。
6、-r :sed的动作支持的是拓展正则表达式的语法(默认是基础正则表达式的语法)
7、-i :直接修改读取的文件内容,而不是由屏幕输出
8、动作说明:[[n1][,n2]]function
9、n1,n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20之间进行的,则“10,20[动作行为]”
10、
11、function有下面这些参数:
12、a :新增
13、d :删除 (比较重要,测试工作中对数据处理时可快速去除无用信息,比如注释行,空白行等)
14、i :插入
15、p :打印 (一般与-n配合使用)
16、s :替换(重中之重!!!,s参数可以说是日常测试工作中对数据用sed清理过滤时使用率最高的了)
sed 修改表达式:
sed 's/待修改/修改结果/'
注意说明:
表达式单引号中的s表示修改,/ 符号表示分隔,实际上将/换成其他符号也可以,只要能起到分隔作用就OK。
1、[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/'
2、aaa|BBB}|cccbbb
3、[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's#bbb#BBB#'
4、aaa|BBB}|cccbbb
若想讲目标中所有的字段都替换,需要在命令最后加上g:
1、[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/g'
2、aaa|BBB}|cccBBB
sed还可以修改文件中的内容,现在有文件text.txt,内容如下:
![4950c141bc5839731db6c9b8c00d9e12.png](https://i-blog.csdnimg.cn/blog_migrate/77334859e47f081f6095a54e66cea985.jpeg)
用sed 's/hello/HELLO/' text.txt命令将文件中的hello
替换成HELLO:
![2e6d0276d01977d17b454cea5c7fac67.png](https://i-blog.csdnimg.cn/blog_migrate/e68411af0f2c49b0d8c7d243c28b6835.jpeg)
但是此时我们打开源text.txt文件发下源文件内容并未改变:
![773d67b37caddf6827c89cb2c3d68fd4.png](https://i-blog.csdnimg.cn/blog_migrate/f694e150d8fba6b182de94aa540e7c34.jpeg)
注意说明:
sed 在修改文件内容时,是另外开辟了一块模式空间,将修改后的内容放入并输出,源文件并未修改;
这时如果想要修改源文件就需要借助
-i
命令,另外为了防止误操作修改文件,一般可以采取这种写法:
sed -i.bak 's/hello/HELLO/' text.txt
,这种写法在修改源文件的同时还会生成一份以.bak结尾的备份文件,相较安全。
![e7ba95709afaff463908ecb95e561245.png](https://i-blog.csdnimg.cn/blog_migrate/6e3a500c606932a39c22ab02668e2ab8.jpeg)
sed -e
命令可以直接在命令行模式上进行sed的动作编辑,但看解释比较晦涩,来看一个实例:
需求: 现有一个1.txt的文本,内容如下:
![e9dad7746780c24c64ede933ec3ca15d.png](https://i-blog.csdnimg.cn/blog_migrate/ec48c641d086c07611ab3d08db777eb9.jpeg)
要将其中每行末尾的:都替换成@,将a替换成A,并在文本末尾加上“Sed Test”命令:
![bae33be710ffc134ccff8c732525f2a8.png](https://i-blog.csdnimg.cn/blog_migrate/87bb81fc84ffc8bcafd60f30822bf3db.jpeg)
实例演示:
1、[16210504@izuf60jasqavbxb9efockpz ~]$ sed -i -e 's/:/@/g' -i -e 's/a/A/' -i -e '$a Sed Test' 1.txt
![121d89db9f9add48b199e7ad55e52603.png](https://i-blog.csdnimg.cn/blog_migrate/a5b7556c3b9f463d485c08e8f57e068e.jpeg)