当前位置:   article > 正文

Linux 三剑客grep 、sed、awk_grep 最后一行

grep 最后一行

Linux 三剑客是(grep,sed,awk)三者的简称,他们通常结合正则一起使用。 grep擅长查找,sed擅长修改文件。awk擅长取列。

一、grep

grep是一个文本过滤工具,可以全局搜索文件中的内容

参数说明

  • -v 显示不被pattern匹配到的行
  • -o 仅显示匹配到的字符串
  • -n 显示匹配的行号
  • -i 忽略字符大小写
  • -A n 显示后n行
  • -B n 显示前n行
  • -C n 显示上下n行
  • -r 递归查找

案例演示:

① 找出1.txt 中是否有 "are" 字符串,并显示行号

  1. [root@master-129 myshell]# grep -n "are" 1.txt
  2. 4:10 There are orange,apple,mongo

② 查询当前目录下面所有的文件是否含有 "are" 字符串

  1. [root@master-129 myshell]# grep -n "are" ./*
  2. ./1.txt:4:10 There are orange,apple,mongo

③ 以root开头的行

  1. [root@master-129 myshell]# grep '^root' /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash

二、awk介绍

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。可以理解为字符串进行分组。

-F 后面可以写分隔符

① 显示用户名对应的 uid

cat /etc/passwd | awk -F[:] '{print $1,$3}'

② 显示最后一行,并显示行数

cat /etc/passwd | awk -F[:] '{print $NF,NR}'

 -F是根据":" 分组,NF和NR内置参数,NF是列数,NR是行数

③ 用awk统计linux系统中所有的用户数

cat /etc/passwd | awk '{count++}END{ print count}'

④ 统计某个文件夹下文件所占的字节数 

ls -l | awk 'BEGIN{size=0}{size=size+$5}END{print size}'

三、sed 

是一种支持正则表达式的非交互式流编辑器

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

sed的常用选项

  • -n: 只显示匹配处理的行(否则输出所有)
  • -i: 直接在文件中进行修改,而不是输出到屏幕
  • -r: 支持扩展正则表达式
  • -e: 执行多个编辑命令时(一般用 ; 代替)

替换操作:s命令

最常见的替换命令

sed -i 's/a/b/g' 1.txt 

 -i 直接替换,s//g标准格式 中间的a/b就是 被替换和替换词

当需要从第N处匹配开始替换时,可以使用 /Ng:

  1. echo sksksksksksk | sed 's/sk/SK/2g'
  2. skSKSKSKSKSK
  3. echo sksksksksksk | sed 's/sk/SK/3g'
  4. skskSKSKSKSK
  5. echo sksksksksksk | sed 's/sk/SK/4g'
  6. skskskSKSKSK

② 删除操作:d命令

1、删除空白行

sed '/^$/d' file

 2、删掉第二行

 sed '2d' file

3、删除文件中所有开头是test的行

sed '/^test/'d file

4、删除文件的最后一行

sed '$d' file

sed 功能太多了,最常见的就是替换,这种字符串可以使用php、python脚本去操作,感觉方便一些

四、面试题

① 有1000个文件怎么批量修改, abc批改成aaa 

grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'

xargs命令是传参到命令行

② 分析日志t.log访问量,将各个ip地址进行截取,并统计出现次数,按从大到小排序

  1. http://182.92.175.10:81/index.html
  2. http://182.92.175.11:81/index2.html
  3. http://182.92.175.12:81/index3.html
  4. http://182.92.175.13:81/index4.html
  5. http://182.92.175.14:81/index5.html
  6. http://182.92.175.14:81/index6.html
cat ip.txt | awk -F[/] '{print $3}' | sort | uniq -c | sort -nr

awk 根据 / 分组,输出低3列,进行排序sort,然后根据uniq进行分组,最后sort再排序 -nr

sort -nr表示 -n依照数值的大小排序 -r相反排序从大到小排序

uniq -c命令统计前,比较要先排序。

③ 统计连接到服务器的各个ip情况,并按连接数从大到小排序

netstat -an | grep 'ESTABLISHED' | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr

④ 用shell写一个脚本,对无序的一列数字进行排序,并求和

  1. 1
  2. 1
  3. 1
  4. 2
  5. 2
  6. 3
  7. 3
  8. 3
  9. 4
  10. 4
  11. 5
  12. 6
  1. [root@master-129 myshell]# sort -n 2.txt | awk '{sum+=$1;print $1} END {print "和是="sum}'
  2. 1
  3. 1
  4. 1
  5. 2
  6. 2
  7. 3
  8. 3
  9. 3
  10. 4
  11. 4
  12. 5
  13. 6
  14. 和是=35

⑤ 统计某个目录下所有的文件个数和所有文件总行数的指令

find  /root/myshell/ -name '*.*' | wc -l
find  /root/myshell -name '*.*' | xargs wc -l

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/889963
推荐阅读
相关标签
  

闽ICP备14008679号