Linux三剑客
Linux三剑客之grep
grep是linux三剑客之一,它是文本过滤器(根据文本内容过滤文件)。

命令介绍
Ⅰ、语法格式: grep [参数] [匹配规则] [操作对象]
Ⅱ、参数
以下以/etc/fsta文件内容为例,

-
-n : 显示筛选出的内容在文件内的行号
![image]()
-
-A : 显示匹配行及其后n行
![image]()
-
-B : 显示匹配行及其前n行
![image]()
-
C : 显示匹配行及其前后n行
![image]()
-
-c : 返回符合匹配内容的列数
![image]()
-
-o : 只显示匹配的内容文本
![image]()
-
-v : 匹配内容取反
![image]()
-
-q : 静默输出
![image]()
-
-i : 忽略匹配文本大小写
![image]()
-
-l : 匹配成功,返回文件名
![image]()
-
-R | r : 递归匹配(针对目录)
![image]()
-
-E : 扩展正则匹配(等价于egrep)
![image]()
练习
1、在/etc/passwd文件中,匹配以ftp开头的行
[root@localhost ~]# grep '^ftp' /etc/passwd
2、 在/etc/passwd文件中,匹配以bash结尾的行
[root@localhost ~]# grep 'bash$' /etc/passwd
3、匹配本机中有哪些ip
[root@localhost ~]# ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
4、在/etc/fstab文件中,匹配无 # 开头的行
[root@localhost ~]# grep -v '^#.*' /etc/fstab
5、在nginx.conf文件中,匹配除#开头的行和空行
[root@localhost ~]# grep -vE '^ *#|^$' /etc/nginx/nginx.coonf
Linux三剑客之sed
sed是linux三剑客之一,sed 命令是利用脚本来处理文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

命令介绍
Ⅰ、命令格式:sed [参数] [动作] [操作对象]
Ⅱ、参数 (以employee.txt文件为例,文件内容如下:

-
-e : 允许多项编辑
![image]()
-
-n : 仅显示处理后的结果
![image]()
-
-i : 同步修改操作对象文件
![image]()
-
-r : 支持扩展正则
-
-f : 指定sed匹配规则脚本文件
Ⅲ、动作参数
-
a : 在指定或匹配行的下一行插入a后接的字符串
![image]()
-
c : c后接字符串,替换指定或匹配的行内容
![image]()
-
d : 删除指定或匹配的行
![image]()
-
i : i后接字符串,在指定或匹配行的上一行插入
![image]()
-
p : 打印匹配的数据,通常于sed -n 配合使用
![image]()
-
s : 与正则配合使用,替换匹配的字符(只替换第一个匹配的)
![image]()
-
g : 配合s使用全部替换
![image]()
-
r : 读取脚本文件
-
w : 将操作对象文件中指定内容写入w后接的文件
![image]()
-
y : y前的数字表示处理的行数,替换匹配的单个字符
![image]()
练习
1、删除/etc/passwd所有包含root的行,其他行输出
[root@localhost ~]# sed '/root/d' /etc/passwd
2、修改/etc/passwd中root为ROOT
[root@localhost ~]# sed 's/root/ROOT/g' /etc/passwd
3、将/etc/nginx/nginx.conf所有行前加 '# '
[root@localhost ~]# sed '/.*/# &/' /etc/nginx/nginx.conf
注:此处&代表前面匹配的内容
Linux三剑客之awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
awk命令介绍
Ⅰ. 命令格式:awk [参数] [处理规则] [操作对象]
Ⅱ. 参数
以下参数实例操作文件以/etc/passwd为例
- -F : 指定文本分隔符(默认是空格为分隔符)
![image]()
Ⅲ. 内建变量
-
$0 : 代表当前整行
![image]()
-
$n : 代表第n列
![image]()
-
NF :记录根据分隔符切分后的列数
![image]()
-
NR :记录行数
![image]()
-
FS :指定文本内容分隔符
![image]()
-
OFS :指定打印结果的分隔符(默认空格)
![image]()
Ⅳ. 运算符
- 算数运算 +、-、*、/、%、+=、-=、*=、/= 等
- 关系运算 ==、>、<、>=、<=、!=
- 逻辑运算 &&、||、!
- 匹配正则表达式 ~、!~
- 成员运算 in
例子(以以下文件内容为例)

1、过滤第一列大于2的行
[root@localhost ~]$ awk '$1>2 {print $0}' 1.txt

2、过滤第一列等于2的行
[root@localhost ~]$ awk '$1==2 {print $0}' 1.txt

3、过滤第一列大于2并且第二列等于Are的行
[root@localhost ~]$ awk '$1>2 && $2=="Are" {print $0}' 1.txt

4、输出第二列包含th并且打印第二列与第四列
[root@localhost ~]$ awk '$2 ~ /th/ {print $2,$4}' 1.txt

Ⅴ. awk函数
格式化输出 printf
[root@localhost ~]$ awk -F: '{printf "|%-4s|%-15s|\n",NR,$1}' /etc/passwd

查找字符串index
[root@localhost ~]$ awk '{print index($0,"games")?"yes":"no"}' /etc/passwd

Ⅵ. 条件语句与循环
1、只打印偶数行
[root@localhost ~]$ awk '{if(NR%2==0) {print NR,$0}}' /etc/passwd

2、每行重复打印3次
[root@localhost ~]$ awk '{for(i=0;i<3;i++){print $0}}' /etc/fstab

Ⅶ. awk生命周期
awk同grep、sed一样,都是读一行处理一行,直到处理结束。

awk工作流程:
- 执行BEGIN块内的内容
- 读取一行数据
- 根据指定的分隔符划分域,$0表示一行内容,$n表示第n个域或列
- 通过给定的规则处理文本
- 循环读取每行内容处理直到结束
- 执行END块内的内容,输出最终结果































浙公网安备 33010602011771号