python grep awk_三剑客-grep-awk-sed

三剑客-grep-awk-sed

grep

格式:

grep 参数 过滤文件内容 文件名称

cat file|grep '过滤的内容'

​ 参数: -v 取反

​ -E 支持扩展正则 | 或者 egrep ‘$|#’

​ -n 显示过滤内容的行号

​ -o 查看匹配过滤过程

例:

[root@oldboyedu ~]# grep root passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# grep root passwd -o

root

root

root

awk

awk 过滤内容和统计数据

格式:

​ awk '/匹配模式/{动作}' file

​ cat file|awk '模式{动作}'

参数:

​ awk中 动作的逗号 表示空格

​ awk 内置变量

​ $1 $2 过滤列

​ NR 过滤行号

​ , 即空格

​ NF 最后一列的列号

​ -F 指定分隔符

例:

只有模式没有动作 默认输出模式匹配到的内容

[root@oldboyedu ~]# awk '/root/' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# awk '/root/,/adm/' passwd #过滤出从root到adm的行

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

[root@oldboyedu ~]# awk 'NR==1' passwd #过滤行号等于1的行

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# awk -F: '$3==0' passwd #-F指定分隔符是冒号: $3是第三列 以:为分隔符过滤出第三列等于0的行

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# awk -F: '$3>0' passwd # 以:为分隔符过滤出第三列等于0的行

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin #第三列数值为用户的uid号

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

模式+动作 #过滤出root到adm的行中的第一列信息

[root@oldboyedu ~]# awk -F: '/root/,/adm/{print $1}' passwd

root

bin

daemon

adm

输出行号 #过滤行号,输出第一列信息--→行号

[root@oldboyedu ~]# awk -F: '{print NR,$0}' passwd

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

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

wc 统计数量

-l 统计行号

-L 统计文件中最长的行的长度

[root@oldboyedu ~]# awk -F: ' $3>0 && $3<1000' /etc/passwd|wc -l

22 #过滤uid大于3和小于1000的行,wc -l 进行统计,由此可过滤出系统中的虚拟用户

[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd

root:x:0:0:root:/root:/bin/bash #过滤uid等于0的行

[root@oldboyedu ~]# awk -F: '$3==0' /etc/passwd|wc -l

1 #过滤uid等于0的行 wc -l 进行统计

[root@oldboyedu ~]# awk -F: '$3>=1000' /etc/passwd|wc -l

3

sed

sed 取行 过滤字符串 替换

格式:

sed '/过滤字符串/' file

cat file|sed '/过滤字符串/'

参数:

​-n 取消默认输出

​-i 修改源文件

​sed执行过程:

​ 一行一行的处理

​ 如果对当前的行 没有动作 默认输出到屏幕

​ sed 增 删 改 查

例:

sed 之 查内容

按照字符串匹配

[root@oldboyedu ~]# sed -n '/root/p' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# sed -n '/^root/p' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# sed -n '/^ro/p' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# sed -n '/sh$/p' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# sed -n '/root/,/adm/p' passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

[root@oldboyedu ~]# sed -n '3p' passwd

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@oldboyedu ~]# sed -n '2p' passwd

bin:x:1:1:bin:/bin:/sbin/nologin

[root@oldboyedu ~]# sed -n '1p' passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboyedu ~]# sed -n '1,3p' passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@oldboyedu ~]# sed -n '$p' passwd # 最后一列

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sed之增加内容

a 在n行后面追加新的内容

[root@oldboyedu ~]# cat test.txt

lidao 2

alex 2

oldboy 3

test 1

[root@oldboyedu ~]# sed '2a oldboy111' test.txt

lidao 2

alex 2

oldboy111

oldboy 3

test 1

i 在当前行插入新的内容

[root@oldboyedu ~]# sed '2i oldboy111' test.txt

lidao 2

oldboy111

alex 2

oldboy 3

test 1

c 替换当前整行的内容

[root@oldboyedu ~]# sed '2c oldboy111' test.txt

lidao 2

oldboy111

oldboy 3

test 1

[root@oldboyedu ~]# sed -i '7c SELINUX=disabled' /etc/selinux/config

w 保存当前的内容至文件 没啥用

[root@oldboyedu ~]# sed '1,3w newfile.txt' test.txt

lidao 2

alex 2

oldboy 3

test 1

sed之删除

格式:

sed '3d' file

[root@oldboyedu ~]# sed '3d' test.txt

lidao 2

alex 2

test 1

[root@oldboyedu ~]# sed '1,3d' test.txt

test 1

[root@oldboyedu ~]# sed '/root/d' passwd

bin:x:1:1:bin:/bin:/sbin/nologin

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

sed替换

sed 's#替换谁#替换成什么#g'

sed 's///g'

sed 's@@@g'

s 替换标志

g 全局替换

[root@oldboyedu ~]# sed 's#root#oldboy#g' passwd

oldboy:x:0:0:oldboy:/oldboy:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

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

oldboy:x:oldboy:var/var:sbin/login

[root@oldboyedu ~]# sed 's#200#201#g' /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

BOOTPROTO=none

NAME=eth0

DEVICE=eth0

ONBOOT=yes

IPADDR=10.0.0.201

PREFIX=24

GATEWAY=10.0.0.254

[root@oldboyedu ~]# sed 's#[:/0-9x]# #g' /etc/passwd|xargs -n1|sort |uniq -c|sort -rn|head

25 sbin

19 nologin

8 bin

7 var

4 root

4 oldboy

4 bash

3 sync

3 spool

3 shutdown

[root@oldboyedu ~]# sed 's#[:/0-9]# #g' /etc/passwd|xargs -n1|awk '{count[$1]++}END{for(i in count) print i,count[i]}'|awk '{print $2,$1}'|sort -rn|head|grep -v x

25 sbin

19 nologin

8 bin

7 var

4 root

4 oldboy

4 bash

3 sync

3 spool

你可能感兴趣的:(python,grep,awk)