Skip to content

三剑客

三剑客 是指三个强大的命令。

grep

参数

  • -n:显示行号。
  • -c:对结果行进行计数。
  • -i:不区分大小写。
  • -v:反向搜索,取反。
  • -w:精准匹配。
  • -o:只显示匹配的结果。
  • -A1:同时打印搜索结果行的后一行。
  • -B3:同时打印搜索结果行的前三行。
  • -C2:同时打印搜索结果行的上下各两行。
  • -E:扩展正则表达式。
  • -P:使用perl正则

擅长过滤,或者说查找,按行来过滤。

示例:

  1. /var/log/secure是记录用户登录系统的行为的。登录成功还是失败。系统都会记录这次登录的动作。

    grep 'Failed password' /var/log/secure
  2. 如果我们想讲登录失败的ip地址找出来,可以再次过滤。比如某个ip地址登录了多少次

    grep 'Failed password' /var/log/secure | grep _ip | wc -l
  3. 可以借助正则表达式进行过滤,可以讲内容过滤得很干净。

    grep 'Failed password' /var/log/secure|grep --color -Po "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)"

sed

这个用的相对较少。主要用于去行和修改替换。

用法:

sed [-nri] [动作] 目标文件路径

参数讲解:

  • -n:使用安静(silent)模式。在一般sed用法中,所有来自STDIN的数据一般都会被列出到终端。但是如果加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来。
  • -rsed的动作支持的是延伸正则表示法的语法。(默认是基础正则表达式)
  • -i: 直接修改读取的文件内容,而不是输出到终端。

动作说明:

[n1[,n2]] function

n1,n2一般表示为行号。[,n2]表示这个参数可选。

function

  • a:指定行后面一行。
  • d:删除。
  • i:指定行前面插入一行。
  • p:打印,一般和-n参数一起使用。
  • s:替换 需要I忽略大小写,全局替换需要G

awk

擅长取列

比如a.txt的内容如下:

2 This is a test.
3 Do you like awk.
This's a test.
10 There are orange,apple,mongo
  1. 取第一列

    awk '{print $1}' a.txt
  2. 取第三列

    awk '{print $3}' a.txt
  3. 取第二列和第三列

    awk '{print $2,$3}' a.txt
  4. 取每一行的最后一列

    awk '{print $NF}' a.txt //NF是固定写法
  5. 取第一列和最后一列

    awk '{print $1,$NF}' a.txt
  6. 反着写,将文件内容列重新排版

    awk '{print $NF,$1}' a.txt

计算

假设4.txt文件内容如下:

# 水果,每斤多少钱,总共多少斤
orange 10 20
apple 20  30
mongo 50  10
banana 5  200
  1. 计算每种水果的总价格

    awk '{print $1,$2*$3}' 4.txt
  2. 添加备注信息

    awk '{print $1"总价为:",$2*$3"元"}' 4.txt