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. 玩透二叉树(Binary-Tree)及前序(先序)、中序、后序【递归和非递归】遍历

    基础预热: 结点的度(Degree):结点的子树个数:树的度:树的所有结点中最大的度数:叶结点(Leaf):度为0的结点:父结点(Parent):有子树的结点是其子树的根节点的父结点:子结点/孩子结点 ...

  2. 学Haskell不该误入范畴论

    浪费了两个星期去学范畴论,结果没啥用,关键是太抽象了.理解不能. 实际上压根联系也没那么紧密.

  3. .Net Core实战教程(三):使用Supervisor配置守护进程

    安装Supervisor yum install python-setuptools easy_install supervisor 配置Supervisor mkdir /etc/superviso ...

  4. Bootstrap3-导航条

    1. 定义导航条 <!-- 导航条 navbar --> <div class="navbar nav-bar-default"> <ul class ...

  5. 看一下“Dubbo 2.7”的三大新特性

    Dubbo 2.7.x 作为 Apache 的孵化版本,除了代码优化之外,还新增了许多重磅的新特性,本文将会介绍其中最典型的三个新特性: 一.异步化改造 二.三大中心改造 三.服务治理增强 一.异步支 ...

  6. Mybatis映射文件标签(关于sql)

    Mybatis映射文件 1.接口的全限定名和映射文件的namespace一致 <mapper namespace="com.offcn.dao.UserDao"> 2. ...

  7. 78.3D立体轮播图(完整兼容手机端和pc端)

    效果呈现来源于http://www.jq22.com/demo/jR3DCarousel-master20160315/ 在此基础上改成需要的3个分类的3D图 由于原有的不支持粘贴复制显示3个分类 我 ...

  8. ecshop 中的$GLOBALS

    ec二次开发 或研究ec的一些网友 经常在论坛里提到 $GLOBALS['db']; $GLOBALS['ecs'];在那定义的等帖子. 下来就$GLOBALS我说一点:       想搞明白的朋友 ...

  9. 简要分析一下java中线程的生命周期

    面试题:您了解线程吗?简单叙述一下线程的生命周期? 答:之前学过一些有关于线程方面的知识,并且在编写代码的过程中还是要经常考虑线程,所以,我对线程还是了解一点的. 首先,创建一个线程,线程进入初始状态 ...

  10. java 使用网建SMS发送短信验证码

    首先, 注册并登录网建用户, 新注册用户将获得5条的测试短信 网建短信通地址: http://sms.webchinese.cn/default.shtml 注册账号在此就不多做赘述了, 直接上代码 ...