1 简介
其实就是三个命令处理文本文件的三个命令
- grep:过滤文件中的符合指定内容的行
- awk:从文件中的每行内容中截取指定的部分/字段
- sed:对文件中的内容进行替换
2 grep
grep也是一模式化的工具在grep的时候,是针对每一行进行一次过滤,判断这行是否有满足条件的内容,如果有就显示这行;否则不显示
格式:
grep [选项] "匹配的内容" 目标文件
cat 目标文件 | grep [选项] "匹配的内容"
选项
-v:取反-o:显示匹配的内容
3 sed
sed 在处理文本的时候,会将文本加载到内存中,然后对内存中的文件的副本进行处理【也就是文件的原始内容不受影响】
格式:
sed [选项] 操作 目标文件
选项
-i:修改原始文件【如果不加-i,那就是仅仅修改内存中的文件副本】
案例:将new.txt中的name=tom修改成jerry
sed -i "s/name=tom/name=jerry/g" new.txt
案例:将new.txt中的 / 修改成@
sed -i "s#/#@#g" new.txt
4 awk
截取文件中每行的指定的字段
概念
记录:文件中的每一行都是一条记录分隔符:分割每一行的符号字段:一条记录被分隔符分割后的每一块都是一个字段
格式:
awk -F "分隔符" '{print $数字}' 文件名
cat 文件名 | awk -F "分隔符" '{print $数字}'
补充
0 输出整条记录
NF 输出最后一个字段
测试文件
[root@localhost ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例
[root@localhost ~]# cat a.txt | awk -F "/" '{print $3}'
bin
sbin
sbin
adm:
spool
[root@localhost ~]# ip addr s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group
default qlen 1000
link/ether 00:0c:29:6d:1e:f3 brd ff:ff:ff:ff:ff:ff
inet 172.16.100.2/16 brd 172.16.255.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::ed73:f15a:c37:265d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
案例:截取ip地址
写法1:
ip addr s ens33 | grep "scope global" | awk -F " " '{print $2}' | awk -F "/" '{print
$1}'
写法2:
ip addr s ens33 | awk -F " " '/scope global/{print $2}' | awk -F "/" '{print $1}'
写法3:
ip addr s ens33 | awk -F "[/ ]+" '/scope global/{print $3}