linux命令行统计行数_Linux三剑客

下面所说的是Linux中最重要的三个命令在业界被称为“三剑客”,它们是awk,sed,grep。  我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。 三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。 grep 1.分类  grep命令家族由grep, egrep, fgrep 三个子命令组成,适用于不同的场景。具体如下:

grep 原生的grep命令,使用“标准正则表达式”作为匹配标准。

egrep 扩展的grep命令,相当于$(grep -E),使用“扩展正则表达式”作为匹配标准。

fgrep 简化版的grep命令,不支持正则表达式,但搜索速度快,系统资源使用率低。

pgrep查看当前正在运行的进程,并将与选择条件匹配的进程ID列出到stdout(屏幕)。当你想要某个进程的PID时,pgrep很方便。

2.使用方法 

语法

grep [options] PATTERN [FILE...]

options部分

-i:忽略大小写

--color:高亮匹配上的字符串

-v: 显示没有被模式匹配到的行

  • -n 显示匹配的行号

  • -c 统计匹配的行数

  • -o 仅显示匹配到的字符串

  • -q 静默模式,不输出任何信息

  • -A # after, 后#行

  • -B # before, 前#行

  • -C # context, 前后各#行

  • -e 实现多个选项间的逻辑or关系

  • -w 匹配整个单词

  • -E 使用ERE,相当于egrep

  • -F 相当于fgrep,不支持正则表达式

  • PATTERN部分

    以字符串的方式给定匹配模板,可以使用普通字符串以及正则表达式(标准&扩展)。

FILE部分

需要查找内容的文件。

3.举例

1).查找指定进程和个数

[root@VM-0-12-centos ~]# ps -ef | grep redisroot      7934  7859  0 11:00 pts/0    00:00:00 grep --color=auto redispolkitd  21437 21421  0 Sep22 ?        00:10:02 redis-server 127.0.0.1:6379

2).统计2020年9月29日 PV量

grep '29/Sep/2020' text.txt | wc -l

3).过滤ip地址

egrep -o "([0-9]{1,3}\.){3}[0-9]"

sed

1.概述

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

915c4d998833478e9ea002c2d41af8f3.png

2.基本语法

sed [option] 'script' [input file]...

option部分

-n:不输出模式空间中的内容到stdout

-e:可以在sed命令中指定多个script脚本,多点编辑功能

-f:输入sed脚本,脚本中写着编辑命令

-r:支持使用扩展的正则

-i:直接编辑源文件

script部分

地址定界编辑命令(和vim命令相似)

1)空地址:全文编辑

2)单地址:

#:指定某一行,对特定行进行编辑

/pattern/:指定模式匹配到的那一行

3)地址范围:

#,#

#,+#

#,/pattern/

/pattern1/,/pattern2/

4)步进地址:

1~2:以1为起始行,然后递进2行向下匹配

2~2:所有偶数行

5)编辑命令:
  d:删除整行,d放在最后
  p:显示模式空间中的内容, 放在最后
  a:在匹配的行后面增加文本,使用\n支持多行追加。a放在定界后面
  i:在前面加文本。举例:sed '3i hello' xxx
  c:替换行为指定的文本。举例:sed '3c text' xxx 把第三行替换成text。sed -i '/xyz/c helloworld' num.txt
  w:保存模式空间中匹配的内容到指定位置。举例:sed -n '/[#]/w /tmp/demo' /etc/fstab 将/etc/fstab中非#开头的行保存到/tmp/demo中。
  r:读取指定文件的内容添加到当前文件匹配到的行后面,进行文件合并。
  !:条件取反。用法:地址定界!编辑命令。
  s///:条件替换。
替换标记备注:g(全局替换),p(显示替换成功的行) 3.举例 1).打印指定的行数
sed -n 2p text.txt # 打印第二行的内容sed -n 5,9p text.txt # 打印第五行到第九行的内容
2).将文件中的root全部替换为abc
sed -i 's/root/adb/g' text.txt
awk 1.概述

awk是一个报表生成器,主要用于格式化输出。格式化文本输出器。

8f46064ffebce87d6eca6df4b5a477b1.png

2.基本语法

语法

gawk [option] 'program' FILE

其中program: PATTERN{ACTION STATEMENTS}

{动作指令}可以理解成为命令,最常用的是print、printf

awk读取文档过程 按照行来读取文档,根据输入分隔符切分成小部分(用內建变量来表示$0$1$2...),用ACTION STATEMENTS来处理。$0表示显示整行。 选项option -F:指名输入字段的分隔符; -v:用来实现自定义变量var=value; PATTERN(用于定界) 空: 表示处理文件的每一行 / pattern/: 使用正则匹配需要处理的行 !/pattern/: 上面取反 关系表达式: 结果为真假,结果为真的处理,假的不处理。 非0非空字符串为真,其余为假。

 行定界:不支持直接给出数字的格式(1,2{...})。
 BEGIN/END模式:BEGIN{}表示仅在开始处理文件中的文本之前执行一次的程序,例如打印表头。END{}表示文本处理完成之后执行一次。

变量 內建变量 (在引用变量时不用加$) FS : input field seperator: 输入字段分隔符,默认空白字符。 使用-v指定。 OFS : 输出字段分隔符。 使用-v指定。 R S : 输入时的换行符 ORS : 输出时的换行符 NF : number of field 每一行的字段数量。 加上$NF表示最后一列 NR : number of record 文件的行数,打印出来是打印行号 FNR : 多个文件中的行数分别计数 FILENAME : 当前文件的文件名 ARGC : 参数命令行中参数的个数 A RGV : 返回数组,命令行中的每个参数

3.举例

1).统计2020年9月29日一天内访问最多的10个IP

awk '/29\/Sep\/2020/{ips[$1]++} END{for(i in ips){print i,ips[i]}}' text.txt | sort -k2rn | head -10

2).统计2020年9月29日一天内访问大于100次的IP

awk '/29\/Sep\/2020/{ips[$1]++} END{for(i in ips){if (ips[i]>100){print i,ips[i]} }}' text.txt
想要深入学习linux的在我的公众号回复关键字:【linux】,领取资源
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值