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. 转 Sqlserver_left join 、right join、 inner join 用法

    https://www.cnblogs.com/ingstyle/p/4368064.html   left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right joi ...

  2. contos7自启动django服务

    研究了很多种办法 1.新建一个sh 文件 vi django_autostart.sh 2.编辑文件内容 #!/bin/bash #chkconfig:345 61 61 //此行的345参数表示,在 ...

  3. Objective-C的self.用法

    转自:http://mobile.51cto.com/iphone-313096.htm 进入正题, 我们经常会在官方文档里看到这样的代码: MyClass.h @interface MyClass ...

  4. webview学习

    Android中WebView使用6,js调java实现播放视频 https://blog.csdn.net/zhaihaohao1/article/details/77993890 android ...

  5. 完整的房间类游戏解决方案AiJ

    介绍 AiJ是一套完整的房间类游戏解决方案,支持无限水平扩展来满足更大的人数承载,并且提供了良好的调试接口. 主要模块包括: 注册中心 大厅服务 游戏服务 亲友圈服务 运营管理系统 CocosCrea ...

  6. bokeh 中 ValueError: Unrecognized range input: 解决方法

    bokeh_data.index =bokeh_data.index.astype(np.str) 将其转换为字符型

  7. MySQL Install--CentOS 7配置MySQL服务和开启启动

    创建MySQL服务 编辑文件: vim /usr/lib/systemd/system/mysql.service 录入下面内容: PS: 注意修改ExecStart脚本 [Unit]Descript ...

  8. 面向对象(五)--isinstance与issubclass方法、反射、内置方法(部分)、异常处理

    一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,class) 2.issubclass是用来判断一个类是否为另一个 ...

  9. MySQL视图及索引

    视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...

  10. Linux(Centos7)安装Oracle11.2.0数据字典初始化,监听,网络,创建用户等部分配置

    #创建数据字典和pl/sql包 @/u01/app/oracle/product/11.2.0/db_1/rdbms/admin/catalog.sql; @/u01/app/oracle/produ ...