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. JavaScript之二十三种设计模式

    23种JavaScript设计模式   原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500 ...

  2. javascript getElementsByClassName扩展函数

    代码: function getElementsByClassName(){ if(!arguments[0]){return []};//未指定任何参数,直接返回 var args=argument ...

  3. i春秋——“百度杯”CTF比赛 十月场——Not Found(http请求方法,client-ip伪造ip)

    这道题也是让我很迷... 打开就是not found,让我一度以为是服务器挂了,细看发现有个404.php 访问也没发现什么东西,只有来自出题人的嘲讽 haha~ 不过在首页的header中发现个奇怪 ...

  4. 【LINQ】Select与SelectMany的区别

    Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值.Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,Sel ...

  5. Jenkins+GitLab+Ansible-playbook的环境安装(yum)

    1.安装GitLab 1.1 配置gitlab的yum源 # 参考:https://packages.gitlab.com/gitlab/gitlab-ce/install#bash-rpm curl ...

  6. Yii2实现即可以美化路由访问又可以原始路由访问

    1. 本地环境 nginx version: nginx/1.11.1 PHP 7.1.0-dev (cli) mysql Ver 14.14 Distrib 5.7.22, for Linux (x ...

  7. MATLAB读取一个文件夹下的多个子文件夹中的多个指定格式的文件

    MATLAB需要读取一个文件夹下的多个子文件夹中的指定格式文件,这里以读取*.JPG格式的文件为例 1.首先确定包含多个子文件夹的总文件夹 maindir = 'C:\Temp Folder'; 2. ...

  8. axios用法全解

    [前言] 本文介绍下axios用法,希望对大家有所帮助 这里声明一句:请求数据一般放置到哪里?详见下篇文章 [主体] (1)下载 npm i axios --save (2)引入axios模块 方式1 ...

  9. WTL 9.0的变化 - atlcrack.h

    atlcrack.h中是一些对消息映射的简化,9.0版本中只增加了一个WM_MOUSEWHEEL的响应,而且要求windows vista. #if (_WIN32_WINNT >= 0x060 ...

  10. 201671030129 周婷 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 团队项目评审&课程学习总结 课程学习目标 (1)完成项目验收(2)反思总结课程学习内容 1.对<实验一 软件工程准备&g ...