首页 > 其他分享 >awk,sed,grep三剑客练习脚本

awk,sed,grep三剑客练习脚本

时间:2023-05-31 15:46:22浏览次数:42  
标签:00 grep 1.1 05 sed go com 三剑客

利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )

IT牛客 IT牛客 2023-05-02 21:00 发表于河南 收录于合集 #linux13个 #awk1个 #sed1个

原文:

blog.csdn.net/weixin_43291944/article/details/100180464 IT牛客 专注于IT技术分享,原创技术和创新技术分享,IT牛客,我们一起进步…… 12篇原创内容 公众号

图片

图片

                                      

1. grep

                                                                                   

grep-global regular expression print - 全局正则表达式打印

可用于数据查找定位

图片

图片

 

curl -s https://testerhome.com | grep href

图片

图片

curl -s https://testerhome.com | grep href | grep -o "http[^\"]*"

图片

图片

curl -s -I https://testerhome.com/topics/feed

图片

图片

curl -s https://testerhome.com | grep href | grep -o "http[^\"]*" | while read line;do curl -s -I $line | grep 200 && echo $line || echo ERR $line;done

 

4. 最终结果展示

图片

 

2. awk   

                                           

图片

图片

 


awk的字段数据处理


 

  • -F 参数指定字段分隔符

  • BEGIN{FS=‘_’} 也可以表示分隔符

 

$0 代表原来的行$1 代表第一个字段$N 代表第N个字段$NF 代表最后一个字段

 

下面以一个在nginx.log中查找返回状态码非200的请求响应数目的需求为例,演示awk的基础用法

 

有一份nginx.log文件,打开后内容格式如下:

220.181.108.111 - - [05/Dec/2018:00:11:42 +0000] "GET /topics/15225/show_wechat HTTP/1.1" 200 1684 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" 0.029 0.029 .216.244.66.241 - - [05/Dec/2018:00:11:42 +0000] "GET /topics/10052/replies/85845/reply_suggest HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.016 0.016 .216.244.66.241 - - [05/Dec/2018:00:11:42 +0000] "GET /topics/10040?order_by=created_at HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.002 0.002 .216.244.66.241 - - [05/Dec/2018:00:11:42 +0000] "GET /topics/10043/replies/85544/reply_suggest HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.001 0.001 .216.244.66.241 - - [05/Dec/2018:00:11:44 +0000] "GET /topics/10075/replies/89029/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.001 0.001 .216.244.66.241 - - [05/Dec/2018:00:11:44 +0000] "GET /topics/10075/replies/89631/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.001 0.001 .216.244.66.241 - - [05/Dec/2018:00:11:45 +0000] "GET /topics/10075?order_by=created_at HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.000 0.000 .216.244.66.241 - - [05/Dec/2018:00:11:45 +0000] "GET /topics/10075?order_by=like HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.001 0.001 .223.71.41.98 - - [05/Dec/2018:00:11:46 +0000] "GET /cable HTTP/1.1" 101 60749 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2608.898 2608.898 .113.87.161.17 - - [05/Dec/2018:00:11:39 +0000] "GET /cable HTTP/1.1" 101 3038 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" 112.418 112.418 .216.244.66.241 - - [05/Dec/2018:00:11:46 +0000] "GET /topics/10079/replies/119591/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.001 0.001 .216.244.66.241 - - [05/Dec/2018:00:11:46 +0000] "GET /topics/10089?locale=zh-TW HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, [email protected])" 0.002 0.002 .

 

观察log内容,可以发现,以空格为分隔符,状态码在第九个字段位置;这里我们用awk命令从第九个字段位置开始匹配非200的状态码并打印出来。命令:

 

awk '$9!~/200/{print $9}' nginx.log
[avbxb9efockpz ~]$ awk '$9!~/200/{print $9}' nginx.log301301301301301301301301301......#剩余部分省略

 

再对取出的数据进行排序->去重->按数字的倒叙进行排列。命令:

 

awk '$9!~/200/{print $9}' nginx.log | sort | uniq -c | sort -nr

 

命令含义:

sort: 按从小到大进行排序uniq -c :去重(相邻)-nr: 按数字进行倒叙排序-n:按数字进行排序

结果展示:


[sqavbxb9efockpz ~]$ awk '$9!~/200/{print $9}' nginx.log | sort | uniq -c | sort -nr 433 101 304 301 266 404 152 302 7 401 5 304 2 499 2 422 1 500

图片

1 nobody2 root3 daemon4 _uucp5 _taskgated6 _networkd7 _installassistant8 _lp9 _postfix......

用户信息:

图片

 

图片

cat /etc/passwd | awk -F ':' 'BEGINE{userindex=0}{user[userindex]=$1;userindex++}END{for(i=0;i<NR;i++)print i+1, user[i+10]}' |less

图片

3. sed                                                                                  

 

sed:stream editor   根据定位到的数据行修改数据

图片

 

图片

[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/'aaa|BBB}|cccbbb[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's#bbb#BBB#'aaa|BBB}|cccbbb

 

  • 若想讲目标中所有的字段都替换,需要在命令最后加上g:

 

[16210504@izuf60jasqavbxb9efockpz ~]$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/g'aaa|BBB}|cccBBB

  • sed还可以修改文件中的内容,现在有文件text.txt,内容如下:

     

[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txthello bash worldhi~ testergo go go go!

 

sed 's/hello/HELLO/' text.txt 命令将文件中的hello替换成HELLO

 

[16210504@izuf60jasqavbxb9efockpz ~]$ sed 's/hello/HELLO/' text.txtHELLO bash worldhi~ testergo go go go!

 

但是此时我们打开源text.txt文件发下源文件内容并未改变:

 

[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txthello bash worldhi~ testergo go go go!

图片

[16210504@izuf60jasqavbxb9efockpz ~]$ sed -i.bak 's/hello/HELLO/' text.txt[16210504@izuf60jasqavbxb9efockpz ~]$ ls1  1.sh  Allen_qin  nginx.log  test  text.txt  text.txt.bak  while_test[16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txtHELLO bash worldhi~ testergo go go go![16210504@izuf60jasqavbxb9efockpz ~]$ cat text.txt.bakhello bash worldhi~ testergo go go go!

图片

a:b:c:d:
 

要将其中每行末尾的都替换成@,将a替换成A,并在文本末尾加上“Sed Test
命令:

sed -i -e 's/:/@/g' \-i -e 's/a/A/' \-i -e '$a Sed Test' 1.txt

 

实例演示:

 

[16210504@izuf60jasqavbxb9efockpz ~]$ sed -i -e 's/:/@/g' -i -e 's/a/A/' -i -e '$a Sed Test' 1.txt[16210504@izuf60jasqavbxb9efockpz ~]$ cat 1.txtA@b@c@d@Sed Test
IT牛客 专注于IT技术分享,原创技术和创新技术分享,IT牛客,我们一起进步…… 12篇原创内容 公众号

如喜欢本文,请点击右上角,把文章分享到朋友圈

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

·END·

收录于合集 #linux  13个 上一篇Linux命令之精确控制文件访问权限setfacl 阅读 176   IT牛客 12篇原创内容       写下你的留言    

标签:00,grep,1.1,05,sed,go,com,三剑客
From: https://www.cnblogs.com/cherishthepresent/p/17446303.html

相关文章

  • April 2023-Memory-efficient Reinforcement Learning with Value-based Knowledge Co
    摘要:人工神经网络在一般函数逼近方面很有希望,但由于灾难性遗忘,在非独立或非同分布的数据上训练具有挑战性。经验回放缓冲区(experiencereplaybuffer)是深度强化学习中的一个标准组件,通过将经验存储在一个大的缓冲区中并用于以后的训练,通常用于减少遗忘和提高样本效率。然而,较大......
  • 在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题
    一、简介NetCore跨平台项目开发多了,总会遇到各种各样的问题,我就遇到了一个这样的问题,不能访问Cannotaccessadisposedobject错误,经过自己多方努力,查阅资料,终于找到了解决办法,引发这个问题的原因大多数是多次读取请求Body流造成的,需要换一种获取请求Body流方法,不能使......
  • 适定问题(Well-posed problem)与不适定问题(ill posed problem)
    Well-posedproblem&Ill-posedproblem.适定问题(Well-posedproblem)是指满足下列三个要求的问题:asolutionexists:解必须存在;thesolutionisunique:解必须唯一;thesolution’sbehaviorchangescontinuouslywiththeinitialconditions:解能根据初始条件连续变化,不会发......
  • linux 中sed命令实现文本的大小写转换
     001、将所有的小写字母转换为大写[root@PC1test4]#lsa.txt[root@PC1test4]#cata.txt##测试数据abdmnjuyrXDETHRQYEcvbDdggyi[root@PC1test4]#sed's/[a-z]/\U&/g'a.txt##所有小写字母转换为大写ABDMNJUYRXDETHRQYECVB......
  • 【Oracle】Check size of datafiles and tempfile tablespaces used in CDB and PDB
       --WX:DBAJOE399--setline200pages999columnnamefora10columntablespace_namefora15column"MAXSIZE(GB)"format9,999,990.00column"ALLOC(GB)"format9,999,990.00column"USED(GB)"format9,999,990.00selec......
  • nacos服务下线操作时报错:The Raft Group [naming_instance_metadata] did not find th
    【问题描述】caused:errCode:500,errMsg:dometadataoperationfailed;caused:com.alibaba.nacos.consistency.exception.ConsistencyException:TheRaftGroup[naming_instance_metadata]didnotfindtheLeadernode;caused:TheRaftGroup[naming_instance_metad......
  • sockjs.js:1603 GET http://localhost/sockjs-node/info?t=1685340190468 net::ER
    vue项目报错不影响运行,但控制台看到这报错,属实不舒服 解决方法:进入\node_modules\sockjs-client\dist\sockjs.js注释1603行   刷新页面,没报错了 ......
  • Planar Odometry from a Radial Laser Scanner. A Range Flow-based Approach(1)论文解
    激光光流里程计的基本理解:(1)类比图像光流,假设光强度不变,图像是每个像素点,像素包含灰度值;激光光流,假设障碍物不动,光流是激光范围内的激光点,每个激光点包含距离和角度信息(2)图像信息求导,得到光强度;激光光流信息求导,得到速度(距离的速度,角度的速度),并可以用分解到笛卡尔坐标系下的速度......
  • linux 中 grep命令匹配空格和制表符
     001、匹配空格[root@PC1test4]#lsa.txt[root@PC1test4]#cata.txt##测试数据1_aabb2_ccdd3_eeff4_gghhkk[root@PC1test4]#sed-nla.txt##显示出空格和制表符1_aabb$2_ccdd$3_eeff$4_gg\thh\tkk$[root@PC1test4]#grep"......
  • awk/sed 修改log中的时间戳
    1. useawkhttps://stackoverflow.com/questions/2371248/how-to-convert-timestamps-to-dates-in-bashhttps://www.oreilly.com/library/view/learning-awk-programmingecho"1685182062b4:96:91:e7:b5:5a192.168.1.207ubuntu-f9d679eb0eff:38:fe:2f:82:00:02:......