LINUX之三剑客


本篇主要介绍linux下常用的增删改查工具:

  • grep
  • sed
  • awk

grep是linux下一个强大的搜索工具,几乎操作linux的用户每天都会或多或少的用到grep命令,单一个功能再强大,也存在短板,grep最明显的短板就是不能对已知结果进行更改,因此sed和awk工具就弥补了grep的短板,有人习惯称grep,sed和awk并称为linux下三剑客,是体现了三个工具一个计算机工作者不可缺少的必备技能之一

♣grep的语法:

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

grep参数使用:

因参数过多,个人将列举部分常用的参数

[root@aly-centos7 /]# ps -ef | grep nginx
root : pts/ :: grep --color=auto nginx
[root@aly-centos7 /]# ps -ef | grep -c nginx

1:查找指定进程和个数

文件内容:
[root@aly-centos7 /]# cat passwd1
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
systemd-bus-proxy:x:::systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:::systemd Network Management:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
polkitd:x:::User for polkitd:/:/sbin/nologin
tss:x:::Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#cat passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
过滤结果:
[root@aly-centos7 /]# cat passwd1 | grep -f passwd2 | grep -f passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
最后结果显示三个文件相同的部分

查看多个文件相同的部分

[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# cat passwd3
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# grep -n "root" passwd2
:root:x:::root:/root:/bin/bash
:operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep -n "root" passwd2 passwd3
passwd2::root:x:::root:/root:/bin/bash
passwd2::operator:x:::operator:/root:/sbin/nologin
passwd3::root:x:::root:/root:/bin/bash
passwd3::operator:x:::operator:/root:/sbin/nologin
passwd3::root,root
passwd3::root123
[root@aly-centos7 /]#

从单个和多个文件查找指定内容并显示行号

[root@aly-centos7 /]# grep "^r" passwd3      #查找指定字符开头
root:x:::root:/root:/bin/bash
root,root
root123
[root@aly-centos7 /]# grep "^[^r]" passwd3 #查找非指定字符开头
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# grep "n$" passwd3 #查找指定结尾
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#

指定字符查找开头,非开头,结尾的内容

[root@aly-centos7 /]#cat qq.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

过滤指定日志里面的ip个数

[root@aly-centos7 /]# grep -r -n "root" /etc/
/etc/logrotate.d/ppp:: create root root
/etc/logrotate.d/mysql::# In case the root user has a password, then you
/etc/logrotate.d/mysql::# have to create a /root/.my.cnf configuration file
/etc/logrotate.d/mysql::# user= root
/etc/logrotate.d/mysql::# ATTENTION: The /root/.my.cnf file should be readable
/etc/logrotate.d/mysql::# _ONLY_ by root !
/etc/logrotate.d/mysql-mmm:: create root adm
/etc/logrotate.d/wpa_supplicant:: create root root
/etc/logrotate.d/yum:: create root root
/etc/rsyncd.conf::# use chroot = yes
/etc/statetab::# See $STATE_LABEL in /etc/sysconfig/readonly-root
/etc/statetab::# /root
/etc/group::root:x::
/etc/group::dockerroot:x::
/etc/passwd-::root:x:::root:/root:/bin/bash
/etc/passwd-::operator:x:::operator:/root:/sbin/nologin
Binary file /etc/aliases.db matches
/etc/mime.types::application/vnd.cyan.dean.root+xml
/etc/mime.types::application/vnd.dvb.notif-aggregate-root+xml

过滤指定路径下所以文件里面包含指定字符内容

grep用于常规的查询操作固然方便,但是最大的弊端就是查出来不能增删改,导致如果是写一些脚本就会很不方便,这个时候就需要sed和awk这样的工具来实现。

♣sed的使用:

因参数过多,个人将列举部分常用的参数

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

sed的工作流程:

1:sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(pattern space,模式空间)

2:pattern space内进行模式匹配,即和指定条件做匹配

  不满足模式:输出到标准输出STDOUT

  满足模式:进行指定的模式操作,再输出到STDOUT

3:第二个特殊的内存空间 :保持空间(hold space),临时保存操作在另一处内存

4:当执行pattern space和 hold space相关选项时候会进行之间的数据流编辑操作

5:最后根据操作执行hold space空间操作,选择性显示到STDOUT

查询:

[root@aly-centos7 /]# sed -n '1,5{/^root/p}' passwd2
root:x:::root:/root:/bin/bash
[root@aly-centos7 /]#

指定行区间查找以root开头的内容

[root@aly-centos7 /]# cat passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,$p' passwd3 #显示第一次匹配到的3到最行一行输出
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root123
[root@aly-centos7 /]# sed -n '/3/,+1p' passwd3#显示第一次匹配到的3到向下1行输出
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]#

匹配行之后增加显示内容

[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '1!G;h;$!d' passwd2 #逆向排序
operator:x:::operator:/root:/sbin/nologin
mail:x:::mail:/var/spool/mail:/sbin/nologin
halt:x:::halt:/sbin:/sbin/halt
shutdown:x:::shutdown:/sbin:/sbin/shutdown
sync:x:::sync:/sbin:/bin/sync
lp:x:::lp:/var/spool/lpd:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
bin:x:::bin:/bin:/sbin/nologin
root:x:::root:/root:/bin/bash
[root@aly-centos7 /]#

文本逆向排序输出

operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#
[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '=' passwd2 #不屏蔽空行 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin adm:x:::adm:/var/adm:/sbin/nologin lp:x:::lp:/var/spool/lpd:/sbin/nologin sync:x:::sync:/sbin:/bin/sync shutdown:x:::shutdown:/sbin:/sbin/shutdown halt:x:::halt:/sbin:/sbin/halt mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]# sed '/./=' passwd2 #屏蔽空行 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin adm:x:::adm:/var/adm:/sbin/nologin lp:x:::lp:/var/spool/lpd:/sbin/nologin sync:x:::sync:/sbin:/bin/sync shutdown:x:::shutdown:/sbin:/sbin/shutdown halt:x:::halt:/sbin:/sbin/halt mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin

显示行号(空行也显示)或(空行不显示行号)

[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed -n '$=' passwd3 [root@aly-centos7 /]#

显示文件总行数

[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed -n 'p;n' passwd3 #奇数行
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n '1~2p' passwd3 #奇数行
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/sbin:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root123
[root@aly-centos7 /]# sed -n 'n;p' passwd3 #偶数行
bin:x:::bin:/bin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]# sed -n '2~2p' passwd3 #偶数行
bin:x:::bin:/bin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
root,root
[root@aly-centos7 /]#

显示偶数和奇数行

[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' passwd2
hsab/nib/:toor/:toor:::x:toor
nigolon/nibs/:nib/:nib:::x:nib
nigolon/nibs/:nibs/:nomead:::x:nomead
nigolon/nibs/:mda/rav/:mda:::x:mda
nigolon/nibs/:dpl/loops/rav/:pl:::x:pl
cnys/nib/:nibs/:cnys:::x:cnys
nwodtuhs/nibs/:nibs/:nwodtuhs:::x:nwodtuhs%
tlah/nibs/:nibs/:tlah:::x:tlah$
nigolon/nibs/:liam/loops/rav/:liam:::x:liam$# nigolon/nibs/:toor/:rotarepo:::x:rotarepo [root@aly-centos7 /]#

文件中每行内容逆向显示

[root@aly-centos7 /]# cat passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# sed ':a;s/\B[0-9]\{3\}\>/,&/;ta' passwd2
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin
,,,
,,,
[root@aly-centos7 /]#

将数字按照“个十百”显示

删除:

删除1-5行内容
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1,5d'
:sync:x:::sync:/sbin:/bin/sync
:%shutdown:x:::shutdown:/sbin:/sbin/shutdown
:$halt:x:::halt:/sbin:/sbin/halt
:#$mail:x:::mail:/var/spool/mail:/sbin/nologin
:
:
:operator:x:::operator:/root:/sbin/nologin
:
:
删除奇数行:
[root@aly-centos7 /]# grep -n "" passwd2 | sed '1~2d'
:bin:x:::bin:/bin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:sync:x:::sync:/sbin:/bin/sync
:$halt:x:::halt:/sbin:/sbin/halt
:
:operator:x:::operator:/root:/sbin/nologin
:
删除空行
[root@aly-centos7 /]# grep -n "" passwd2
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:lp:x:::lp:/var/spool/lpd:/sbin/nologin
:sync:x:::sync:/sbin:/bin/sync
:%shutdown:x:::shutdown:/sbin:/sbin/shutdown
:$halt:x:::halt:/sbin:/sbin/halt
:#$mail:x:::mail:/var/spool/mail:/sbin/nologin
:
:
:operator:x:::operator:/root:/sbin/nologin
:
:
[root@aly-centos7 /]# grep "" passwd2 | sed '/^$/d'
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
%shutdown:x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin [root@aly-centos7 /]#

删除指定内容

修改:

将root全部替换成mysql
[root@aly-centos7 /]# grep -n "" passwd3
:root:x:::root:/root:/bin/bash
:bin:x:::bin:/bin:/sbin/nologin
:daemon:x:::daemon:/sbin:/sbin/nologin
:adm:x:::adm:/var/adm:/sbin/nologin
:operator:x:::operator:/root:/sbin/nologin
:root,root
:root123
[root@aly-centos7 /]# sed 's/root/mysql/g' passwd3
mysql:x:::mysql:/mysql:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/mysql:/sbin/nologin
mysql,mysql
mysql123
把数字1全部替换成9
[root@aly-centos7 /]# sed 's/1/9/g' passwd3
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
root,root
root923
只替换行中未出现“sbin”字符的时候,将”root“替换成”nginx“
[root@aly-centos7 /]# sed '/sbin/!s/root/nginx/g' passwd3
nginx:x:::nginx:/nginx:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
nginx,nginx
nginx123
root:x:::operator:/root:/sbin/nologin
root1:x:::operator:/root:/sbin/nologin
root2:x:::operator:/root:/sbin/nologin
[root@aly-centos7 /]#

指定内容进行替换

awk的使用:

在某些场景下,我们需要过滤方式希望是列来匹配,而不是sed的行来匹配,而且awk还可以嵌套for等循环去使用,拓展性强,当然awk也是最难的。

awk的常用命令选项:

  • -F fs   fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
  • -v var=value   赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile  从脚本文件中读取awk命令
  • -m[fr] val   对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

awk内置变量:

  • FS     保存或设置分隔符,例如FS=",";
  • $N     指定分隔符的第N个字段,例如$1,$5代表第一列和第三列;
  • $0      当前读入整行的文本内容;
  • NF     记录当前处理行的字段个(列)数;
  • NR     记录当前处理行的数量;
  • FNR    保存当前处理行在原文本内的行号;
  • FILENAME   当前处理的文本名;
  • ENVIRON     调用shell环境变量。

查询:

[root@aly-centos7 /]# awk '{print $0}' passwd4  #$0代表整列
root x:::root:/root:/bin/bash
bin x:::bin:/bin:/sbin/nologin
daemon x:::daemon:/sbin:/sbin/nologin
adm x:::adm:/var/adm:/sbin/nologin
lp x:::lp:/var/spool/lpd:/sbin/nologin
sync x:::sync:/sbin:/bin/sync
%shutdown x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail x:::mail:/var/spool/mail:/sbin/nologin
operator x:::operator:/root:/sbin/nologin [root@aly-centos7 /]# awk '{print $1}' passwd4 #$1代表第一列
root
bin
daemon
adm
lp
sync
%shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail
operator [root@aly-centos7 /]#

列基本查询

首先要查看剩余内存是那个字段标记,然后标记的这一行用grep取出来,最后用awk把这一行的列取出来在加上一个可读性语句即可
[root@aly-centos7 /]# free | grep Mem | awk '{print"当前剩余内存:\n",$7}'
当前剩余内存: [root@aly-centos7 /]#

当前内存过滤

/var/log/secure是用于记录访问的信息,可以通过这个日志来看出来是否遭受到恶意攻击
[root@aly-centos7 /]# grep "Accepted" /var/log/secure | awk '{print $11}'
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
101.95.130.134
[root@aly-centos7 /]#
通过过滤我就知道那些ip访问了,不过访问的ip数量很多,而生产服务器访问的ip都是固定的,一般都会有一个文件记录,这样可以写一个脚本和你过滤的ip比对,那些没有登记的就可以处理掉。

访问ip过滤

[root@aly-centos7 /]# awk '{print NF}' passwd4

[root@aly-centos7 /]# cat passwd4
root x:::root:/root:/bin/bash
bin x:::bin:/bin:/sbin/nologin
daemon x:::daemon:/sbin:/sbin/nologin
adm x:::adm:/var/adm:/sbin/nologin
lp x:::lp:/var/spool/lpd:/sbin/nologin
sync x:::sync:/sbin:/bin/sync
%shutdown x:::shutdown:/sbin:/sbin/shutdown
$halt:x:::halt:/sbin:/sbin/halt
#$mail x:::mail:/var/spool/mail:/sbin/nologin
operator x:::operator:/root:/sbin/nologin [root@aly-centos7 /]#

统计每行有多少列(NF)

[root@aly-centos7 /]# awk '{print FNR}' passwd3 passwd4

[root@aly-centos7 /]#

分别统计多个文件有多少行(NFR)

[root@aly-centos7 /]# awk -F: 'BEGIN{i=0;j=0}{if($3<=30){i++}else{j++}}END{print "<=30:"i,"\n",">=30:"j}' /etc/passwd
<=:
>=:
[root@aly-centos7 /]#

统计uid小于30的用户有多少和大于30的余户有多少(判断)

[root@aly-centos7 /]# grep --color root /etc/passwd
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin
dockerroot:x:::Docker User:/var/lib/docker:/sbin/nologin
[root@aly-centos7 /]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd [root@aly-centos7 /]#

统计指定字段出现的个数(while循环)

[root@aly-centos7 httpd]# tail - access_log
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
172.16.163.69 - - [/Jul/::: +] "GET / HTTP/1.0" "-" "ApacheBench/2.3"
[root@aly-centos7 httpd]# awk '{ip[$1]++} END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log
172.16.163.69
[root@aly-centos7 httpd]#

统计ip出现的次数

后续将不断完善awk使用案例

Linux之三剑客的更多相关文章

  1. Shell之三剑客

    目录 Shell之三剑客 参考 Grep Sed Awk Shell之三剑客

  2. linux四剑客-grep/find/sed/awk/详解-技术流ken

    四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望 ...

  3. Linux 命令之 linux 四剑客

    Linux命令-- 四剑客 一:Linux命令 之 AWK 符号:^ 开头 $ 结尾 awk 是一种处理文本的语言,一个强大的文本分析命令! 1:提取文件中的每行的第二个 提取前文本中内容为  命令: ...

  4. Linux四剑客find/grep/awk/sed

    find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-m ...

  5. Linux四剑客之awk命令

    AWK详解   awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语 ...

  6. django之三剑客、静态文件配置、请求响应对象、数据库操作

    三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...

  7. linux 运维必备150个命令

    线上查询及帮助命令(1个) man 目录操作命令(6个) ls tree pwd mkdir rmdir cd 文件操作命令(7个) touch cp mv rm ln find rename 文件查 ...

  8. 运维必须掌握的150个Linux命令

    线上查询及帮助命令(1个)man 目录操作命令(6个)ls tree pwd mkdir rmdir cd 文件操作命令(7个)touch cp mv rm ln find rename 文件查看及处 ...

  9. Linux常用的200个命令总结分类

    ●目录操作命令(6 个) ls tree pwd mkdir rmdir cd   ●文件操作命令(7 个) touch cp mv rm ln find rename   ●文件查看及处理命令(21 ...

随机推荐

  1. mvc视图双下拉框联动

    html部分的代码 <tr class="trs"> <td class="item1"><div class="ite ...

  2. Ipfs基础入门

    Ipfs介绍 Ipfs(Inter-Planetary File System!),中文译为星际网络文件系统,是基于默克尔有向无环图(merkle dag)的全球性p2p文件系统. 是一个面向全球的, ...

  3. English--音标拼读

    English|音标拼读 音标拼读主要内容是,如何使用音标进行单词的拼读,并且会有相应的语音现象,最关键的还是自己多加练习,多听~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识 ...

  4. [转]localhost、127.0.0.1和0.0.0.0和本机IP的区别

    一.IP地址是什么 首先,我们要知道网络中的相互访问其实就是在进行两者间的数据传递.就如同送快递一样,快递发出只有知道你的住址信息,才能将快递送到你的手中.而在网络访问时,只有知道你在网络中的地址信息 ...

  5. .net web mvc 权限验证

    这里分享MVC的权限验证,内容中可能存在一些,莫名其妙的方法,那些是以前封装好的,大致可以根据方法名称知道他的意思. using Game.Entity; using Game.Entity.Plat ...

  6. pip install报错:RuntimeError: Python version >= 3.5 required

    由于pip官方的不作为,现如今python2(以及某些低版本python3)配套的pip,已经没法正常的安装pypi包了. 例如需要用到的一套PyCaffe的代码,是基于Python2的,于是用min ...

  7. Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)

    备份类型: 热备份:读写不受影响 温备份:仅可执行读备份 冷备份:离线备份,读写均不能执行,关机备份 物理备份和逻辑备份 物理备份:复制数据文件,速度快. 逻辑备份:将数据导出之文本文件中,必要时候, ...

  8. 【Tomcat】使用Eclipse绑定Tomcat 发布应用&&常见错误

     创建时间:6.14 一.Eclipse绑定Tomcat 步骤1:获得服务器运行环境配置,Window/Preferences/Server/Runtime Environment 步骤2:添加服务器 ...

  9. 【转】Pandas学习笔记(七)plot画图

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  10. isaster(Comet OJ - Contest #11D题+kruskal重构树+线段树+倍增)

    目录 题目链接 思路 代码 题目链接 传送门 思路 \(kruskal\)重构树\(+\)线段树\(+\)倍增 代码 #include <set> #include <map> ...