三剑客
awk、grep、sed
-
awk概念介绍说明
作用特点:- 排除信息
- 查询信息
- 统计信息
- 替换信息
语法格式:
sed [参数] ‘条件-处理方式’ 文件
awk [参数] ‘模式-动作’ 文件
-
awk实际操作过程:
准备测试环境
[root@oldboyedu ~]# cat awk_test.txt
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250💯175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250💯175命令查询信息方法:
按照行号查询信息:
awk ‘NR=2’ awk_test.txt
[root@oldboyedu ~]# awk ‘NR=2’ awk_test.txt
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250💯175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250💯175
[root@oldboyedu ~]# awk ‘NR2’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
[root@oldboyedu ~]# awk 'NR2,NR4’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
[root@oldboyedu ~]# awk 'NR2;NR==4’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75ps: 在linux系统中
oldboy=10 赋值变量信息
oldboy==2 真正oldboy等于数值2按照字符查询信息:
[root@oldboyedu ~]# awk ‘/Xiaoyu/’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
[root@oldboyedu ~]# awk ‘/Xiaoyu/,/Waiwai/’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
[root@oldboyedu ~]# awk ‘/Xiaoyu/;/Waiwai/’ awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75测验:
-
显示xiaoyu的姓氏和ID号码(???)
[root@oldboyedu ~]# awk ‘/Xiaoyu/{print $1","$3}’ awk_test.txt
Zhang,390320151
[root@oldboyedu ~]# awk ‘/Xiaoyu/{print $1,$3}’ awk_test.txt
Zhang 390320151 -
姓氏是zhang的人,显示他的第二次捐款金额及他的名字
[root@oldboyedu ~]# awk ‘/Zhang/{print $4}’ awk_test.txt
:250💯175
:155:90:201
[root@oldboyedu ~]# awk ‘/Zhang/{print $NF}’ awk_test.txt
:250💯175
:155:90:201
[root@oldboyedu ~]# awk ‘/Zhang/{print $NF}’ awk_test.txt|awk -F “:” ‘{print $3}’
100
90
awk ‘/Zhang/{print $NF}’
awk -F “:” ‘{print $3}’
[root@oldboyedu ~]# awk -F “:” ‘/^Zhang/{print $3}’ awk_test.txt
100
90[root@oldboyedu ~]# awk -F “[ :]+” ‘/^Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@oldboyedu ~]# awk -F “[ :]+” ‘/^Zhang/{print $1, 2 , 2, 2,(NF-1)}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90-
显示所有以41开头的ID号码的人的全名和ID号码
[root@oldboyedu ~]# awk ‘$3~/^41/{print $1,$2,$3}’ awk_test.txt
Zhang Dandan 41117397
Liu Bingbing 41117483 -
显示所有ID号码最后一位数字是1或5的人的全名
方法一:
awk ‘ 3 / 1 3~/1 3 /1|5$/{print $1,$2}’ awk_test.txt
[root@oldboyedu ~]# awk ‘ 3 / 1 3~/1 3 /1|5$/{print $1,$2}’ awk_test.txt|column -t
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
Lao Nanhai
方法二:
[root@oldboyedu ~]# awk ‘ 3 / [ 15 ] 3~/[15] 3 /[15]/{print $1,$2}’ awk_test.txt|column -t方法三:
[root@oldboyedu ~]# awk ‘ 3 / ( 1 ∣ 5 ) 3~/(1|5) 3 /(1∣5)/{print $1,$2}’ awk_test.txt|column -t- 显示Xiaoyu的捐款,每个捐款数值前面都有以$开头, 如$110$220$330
[root@oldboyedu ~]# awk ‘$2~/Xiaoyu/{print $NF}’ awk_test.txt
:155:90:201
[root@oldboyedu ~]# #gsub(/需要替换的信息/,“修改成什么信息”,将哪列信息进行修改)
[root@oldboyedu ~]# awk ‘KaTeX parse error: Expected '}', got 'EOF' at end of input: …oyu/{gsub(/:/,"",$NF);print $NF}’ awk_test.txt
$155$90$201
文件中空行进行排除/文件中注释信息进行排除
grep -Ev "#|KaTeX parse error: Expected group after '^' at position 19: …文件信息 sed -n '/^̲#|^/!p’ 文件信息
awk ‘/#|$/’
[root@oldboyedu ~]# awk ‘KaTeX parse error: Expected group after '^' at position 4: 0~/^̲#|^/’ awk_test.txt
#Liu Bingbing 41117483 :250💯175[root@oldboyedu ~]# awk ‘KaTeX parse error: Expected group after '^' at position 5: 0!~/^̲#|^/’ awk_test.txt
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250💯175
Lao Nanhai 918394135 :250💯175总结:awk命令中$符号用法
$1 $2 $3 : 取第几列信息
$NF : 取最后一列
$(NF-n) : 取倒数第几列
$0 : 取所有列的信息如何利用awk取出IP地址信息:
ip a s eth0|awk -F “[ /]+” ‘NR==3{print $5}’
hostname -i -
-
awk高级功能说明
a 对日志信息进行统计(计数)
b 对日志信息数值进行求和 客户端-下载 服务端-上传 消耗网络流量
c (数组)进行排序分析
排序
01 192.168.2.1 600 192 深圳 10万
02 192.168.1.10 500 18 上海
03 192.168.3.10 200 20 广州
30 东北 2千
运维总监—运营(推广)总监
d 可以进行脚本编写(循环语句 判断语句) sh awk_nginx.logawk模式概念说明: 匹配的条件信息
普通的模式:- 正则表达式作为模式
awk ‘/^oldboy/{print xx}’ - 利用比较匹配信息
NR==2
NR>=2
NR<=2 - NR2,NR10
特殊的模式
BEGIN{} 在awk执行命令前做什么事情:
[root@oldboyedu ~]# awk ‘BEGIN{print “姓”,“名”,“QQ号”,“捐款记录”}{print $0}’ awk_test.txt |column -t
姓 名 QQ号 捐款记录
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250💯175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250💯175
Lao Nanhai 918394135 :250💯175
修改内置分隔符变量
awk -F “:” ‘{print $2}’ awk_test.txt
[root@oldboyedu ~]# awk ‘BEGIN{FS=":"}{print $2}’ awk_test.txtEND{} 在awk执行命令结束之后做的操作
[root@oldboyedu ~]# awk ‘BEGIN{print “姓”,“名”,“QQ号”,“捐款记录”}{print $0}END{print “操作结束”}’ awk_test.txt |column -t
姓 名 QQ号 捐款记录
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250💯175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250💯175
Lao Nanhai 918394135 :250💯175
操作结束统计累加运算测试:
[root@oldboyedu ~]# awk ‘/^KaTeX parse error: Expected 'EOF', got '#' at position 185: …ot@oldboyedu ~]#̲ awk '/^/{i=i+1}END{print i}’ /etc/services
17-
统计/etc/services文件中有井号开头的行
awk ‘/^#/{i++}END{print i}’ /etc/services -
统计系统中有多少个虚拟用户 普通用户
第一个历程: 用户信息都保存在什么文件中了
用户信息保存文件: /etc/passwd
第二个历程: 从文件中匹配出虚拟用户 普通用户
匹配普通用户
awk ‘ N F / b a s h / ′ / e t c / p a s s w d a w k ′ NF~/bash/' /etc/passwd awk ' NF /bash/′/etc/passwdawk′NF~//bin/bash/’ /etc/passwd
第三个历程: 进行统计
普通用户数量
[root@oldboyedu ~]# awk ‘KaTeX parse error: Expected 'EOF', got '#' at position 71: …ot@oldboyedu ~]#̲ awk 'NF!~/bash/{i=i+1}END{print i}’ /etc/passwd
22
求和运算:
sum=sum+$n(需要进行数值求和的列)
[root@oldboyedu ~]# seq 10|awk ‘{sum=sum+$1;print sum}’
1 sum=sum+$1 0+1 sum=1
2 sum=sum+$1 1+2 sum=3
3 sum=sum+$1 3+3 sum=6
4 6+4 sum=10
5 10+5 sum=15
6 15+6 sum=21
7 28
8 36
9 45
10 45+10 sum=55 - 正则表达式作为模式
-
课程知识回顾
- 正则符号
基础正则符号:
^ 以什么开头的信息进行匹配 ^oldboy
$ 以什么结尾的信息进行匹配 oldboy$
^$ 表示匹配空行信息
. 匹配任意一个且只有一个字符 grep “.”
- 匹配前一个字符连续出现0次或者多次
.* 匹配所有任意信息 类似于通配符*
\ 将有意义的字符信息,转义成普通字符进行识别
–> 找出文件中以点结尾的信息
将特殊的扩展正则符号,转换成基础正则符号
将没有意义的字符信息转成有意义的字符
\n \r \t
[] 匹配多个字符信息,多个字符匹配时,是或者的关系
[ok] 在文件中找有O的字符信息 找文件中有k的字符信息
PS: 将一个字符串信息,进行拆分成一个一个的字符进行匹配
[^] 对匹配的字符信息进行排除
[^ok] 在文件中找有O的字符信息 找文件中有k的字符信息,进行排除不要显示,显示其他信息
[ok]
扩展正则符号:
- 匹配前一个字符连续出现1次或者多次
| 利用竖线可以匹配多个字符串信息
() 将多个字符信息汇总成整体,进行过滤
进行后项引用前项 (oldboy) \1–sed
{} 指定匹配前一个字符连续出现了多少次
{n,m} 至少连续n次,最多连续m次
{n} 匹配只连续n次的信息
{n,} 至少连续n次,最多不限
{,m} 至少连续0次,最多m次
? 匹配前一个字符连续出现0次或者1次
grep命令识别扩展正则: egrep -E
sed命令识别扩展正则: sed -r学生问题:
- 文件中有\撬棍信息,如何进行过滤
[root@oldboyedu ~]# grep ‘\’ oldboy_test.txt
I \teach \linux. - 文件中有KaTeX parse error: Expected 'EOF', got '#' at position 39: …ot@oldboyedu ~]#̲ grep 'oldgirl’ oldboy_test.txt
$oldgirl
[root@oldboyedu ~]# grep “$oldgirl” oldboy_test.txt
$oldgirl
- 正则符号
-
sed命令概述说明:
sed命令: 字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作
PS: 全屏编辑工具 vi/vimsed命令作用说明:
1). 擅长对行进行操作处理
2). 擅长将文件的内容信息进行修改调整/删除
编写脚本: 修改文件内容信息时
网络服务中的IP地址进行修改: 50台主机迁移机房–新机房
第一个步骤: vi ifcfg-eth0
第二个步骤: 重启网络服务
第三个步骤: 检查测试自动修改网卡地址脚本:
第一个步骤: 修改地址
sed -i “s#10.0.0.200#10.0.0.201#g” ifcfg-eth0第二个步骤: 重启网络服务
systemctl restart network第三个步骤: 过滤ip a s eth0 网卡地址信息存储到一个文件中 共享存储
具体功能作用:
- 文件中添加信息的能力 (增) ok
- 文件中删除信息的能力 (删) ok
- 文件中修改信息的能力 (改)
- 文件中查询信息的能力 (查) OK
-
sed命令的语法信息
sed [OPTION]… {script-only-if-no-other-script} [input-file]…
命令 参数 条件+处理= (指令) 处理文件信息显示出文件中有oldboy行的信息
sed -n ‘/oldboy/p’ oldboy.txt -
sed命令执行原理
参见原理图 -
sed命令实践操作:
创建测试环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOFa sed命令查询信息方法
根据文件内容的行号进行查询:
测试1: 显示单行信息
[root@oldboyedu ~]# sed -n ‘3p’ person.txt
103,Alex,COO
测试2: 根据行号信息,输出多行内容(连续)
[root@oldboyedu ~]# sed -n ‘1,3p’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
测试3: 根据行号信息,输出多行内容(不连续)
[root@oldboyedu ~]# sed -n ‘1p;3p’ person.txt
101,oldboy,CEO
103,Alex,COO根据文件内容的信息进行查询:
测试1: 根据内容信息,输出单行内容
#将有oldboy行的信息找出来
[root@oldboyedu ~]# sed -n ‘/oldboy/p’ person.txt
101,oldboy,CEO测试2: 根据内容信息,输出多行内容(连续)
#将有oldboy到alex行的信息都输出出来
[root@oldboyedu ~]# sed -n ‘/oldboy/,/Alex/p’ person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO测试3: 根据内容信息,输出多行内容(不连续)
#将有oldboy和alex行的信息都输出出来
[root@oldboyedu ~]# sed -n ‘/oldboy/p;/Alex/p’ person.txt
101,oldboy,CEO
103,Alex,COO
106,oldboy,CIOb sed命令添加信息方法
在文件第一行添加信息:
1:第一行
i:第一行前插入
100,oldgirl,UFO
[root@oldboyedu ~]# sed ‘1i100,oldgirl,UFO’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO在文件最后一行添加信息:
[root@oldboyedu ~]# sed ‘$a108,oldgirl,UFO’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
108,oldgirl,UFO测试:
- 在第三行后面添加oldboy.txt信息
sed ‘3aoldboy.txt’ person.txt - 在第二行前面添加oldboy.txt信息
sed ‘2ioldboy.txt’ person.txt - 在有oldboy行的前面添加oldgirl 后面添加olddog信息
sed -e ‘/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt
[root@kafka-01 sed]# sed ‘/oldboy/iwangyi’ person.txt
wangyi
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO-e:根据多个条件筛选
[root@oldboyedu ~]# sed -e ‘/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt
100,oldgirl,UFO
oldgirl
101,oldboy,CEO
olddog
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
oldgirl
106,oldboy,CIO
olddogsed ‘$a100\n101’ person.txt 添加多行信息
企业中编写配置文件:
IPaddress=10.10.10.1
mask=255.255.255.0
gateway=10.10.10.254sed ‘$aIPaddress=10.10.10.1\nmask=255.255.255.0\ngateway=10.10.10.254’ 文件名称
c sed命令删除信息方法
练习:-
删除单行信息
[root@oldboyedu ~]# #删除文件中第三行信息
[root@oldboyedu ~]# sed ‘3d’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO -
删除多行信息
[root@oldboyedu ~]# #删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed ‘2,6d’ person.txt
100,oldgirl,UFO
106,oldboy,CIO
测试:
-
删除有oldboy信息的行
sed ‘/oldboy/d’ person.txt -
删除第三行和第六行
[root@oldboyedu ~]# #删除文件中第二行到第六行内容
[root@oldboyedu ~]# sed ‘2,6d’ person.txt
100,oldgirl,UFO
106,oldboy,CIO
[root@oldboyedu ~]# sed ‘3d;6d’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
106,oldboy,CIO问题: 如何利用sed命令取消空行显示
[root@oldboyedu ~]# sed -n ‘/./p’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO[root@oldboyedu ~]# sed ‘/^$/d’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO[root@oldboyedu ~]# sed -n ‘/^$/!p’ person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIOd sed命令修改信息方法
sed ‘s#原有内容#修改后内容#g’ 文件信息
[root@oldboyedu ~]# sed ‘s##oldgirl#old#g’ person.txt
sed: -e expression #1, char 12: unknown option to `s’
[root@oldboyedu ~]# sed ‘s/#oldgirl/old/g’ person.txt
100,old,UFO101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO104,yy,CFO
105,feixue,CIO
106,oldboy,CIOsed ‘s#()#\n#g’ 文件信息 后项引用前项进行替换修改
利用sed命令取出IP地址信息:
第一个历程: 取出有IP地址的行
[root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0第二个历程: 取出IP地址
[root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)#\1#g’
10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)#\1#g’|sed -r ‘s#(.)/24.#\1#g’
10.0.0.200sed -r ‘s#^.net (.)#\1#g’|sed -r ‘s#(.)/24.#\1#g’ 进行整合
ip a s eth0|sed -n ‘3p’|sed -r ‘s#^.net (.)/24.*#\1#g’sed -n ‘3p’|sed -r ‘s#^.net (.)/24.*#\1#g’ 进行整合
sed -n ‘3 p’
sed -r ‘s#^.net (.)/24.#\1#g’
sed -rn '3s#^.net (.)/24.#\1#gp’
最终取IP地址方法
[root@oldboyedu ~]# ip a s eth0|sed -rn ‘3s#^.net (.)/24.*#\1#gp’
10.0.0.200补充01: 修改文件内容直接进行自动备份
[root@oldboyedu ~]# sed -i.bak ‘s#oldboy#oldold#g’ person.txt
[root@oldboyedu ~]# ll person.txt.bak
-rw-r–r--. 1 root root 104 Oct 10 11:40 person.txt.bak
[root@oldboyedu ~]# cat person.txt.bak
100,#oldgirl,UFO101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO104,yy,CFO
105,feixue,CIO
106,oldboy,CIO补充02: 在真实替换文件内容时候,一定不能让n和i参数同时出现
[root@oldboyedu ~]# sed -ni ‘s#Alex#aaaa#gp’ person.txt
103,aaaa,COO
[root@oldboyedu ~]# cat person.txt
103,aaaa,COO
说明: ni和参数同时使用,会将文件内容进行清空测验替换功能:
创建测试环境:
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy01.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy02.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy03.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy04.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy05.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy06.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy07.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy08.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy09.txt
-rw-r–r--. 1 root root 0 Oct 10 02:10 oldboy10.txt
批量修改文件的扩展名称 将oldboyxx.txt扩展名修改为oldboyxx.jpg[root@oldboyedu oldboy]# ls oldboy*.txt|sed -r 's#(.)txt#mv & \1jpg#g’
mv oldboy01.txt oldboy01.jpg
mv oldboy02.txt oldboy02.jpg
mv oldboy03.txt oldboy03.jpg
mv oldboy04.txt oldboy04.jpg
mv oldboy05.txt oldboy05.jpg
mv oldboy06.txt oldboy06.jpg
mv oldboy07.txt oldboy07.jpg
mv oldboy08.txt oldboy08.jpg
mv oldboy09.txt oldboy09.jpg
mv oldboy10.txt oldboy10.jpg
mv oldboy.txt oldboy.jpg
[root@oldboyedu oldboy]# ls oldboy.txt|sed -r ‘s#(.*)txt#mv & \1jpg#g’|bash批量重命名专业命令: rename
rename .txt .jpg oldboy*.txt
命令 文件名称需要修改的部分信息 修改成什么信息 将什么样的文件进行修改[root@oldboyedu ~]# cat person.txt|sed -i ‘s#COO#CEO#g’
sed: no input files
[root@oldboyedu ~]# sed -i ‘s#COO#CEO#g’ person.txt文件中添加内容方法:
- vim/vi
- cat >>xxx<EOF … EOF
- echo -e “xxx\nxxx”
- sed ‘na/i xxxx\nxxxx\nsxxxx’
总结: sed命令的指令信息
p print 输出信息
i insert 插入信息,在指定信息前面插入新的信息
a append 附加信息,在指定信息后面附加新的信息
d delete 删除指定信息
s substitute 替换信息 s###g(全局替换)
c 替换修改指定的一整行信息
[root@oldboyedu ~]# sed ‘2coldboyedu-sz-01’ person.txt
103,aaaa,CEO
oldboyedu-sz-01总结: sed命令的参数信息
-n 取消默认输出
-r 识别扩展正则
-i 真实编辑文件(将内存中的信息覆盖到磁盘中)
-e 识别sed命令多个操作指令 - 在第三行后面添加oldboy.txt信息
[root@oldboyedu ~]# vim oldboy_test02.txt
张三110105199004067631
李四104105199004067631
赵六 oLdboy
王五104105199004067631
grep
-o 表示单个输出或者连续输出
[root@oldboyedu ~]# grep “[0-9]” oldboy_test02.txt -o
1
1
0
1
。。。
1
#+是拓展正则里面的符号,表示匹配一次或多次
#-o表示连续输出
[root@oldboyedu ~]# grep -E “[0-9]+” oldboy_test02.txt -o 110105199004067631
104105199004067631
104105199004067631
sed
sed -r???
i:行前插入
a:行后插入
-e识别sed命令多个操作指令
在有o1dboy行的前面添加o1dgirl后面添加o1ddog信息
sed -e ’/oldboy/ioldgirl’ -e ‘/oldboy/aolddog’ person.txt
#\1表示引用()里的内容
[rootgoldboyedu~]# ip a s eth0lsed -n ‘3p’ l sed -r ‘s#".net (.)#\1#g’ 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
#利用sed改之前先备份
[rootgoldboyedu~]# sed -i.bak ‘s#oldboy#oldoldfg’ person.txt [rootgoldboyedu ~]# 11 person.txt.bak
-rW-r–r--.1 root root 104 0ct 10 11:40 person.txt.bak
&:表示引用管道符前面的结果信息
[rootloldboyedu oldboy]# ls oldboy*.txt l sed -r ‘s#(.*)txt#mv & \1jpg#g’
mv oldboy01.txt oldboy01.jpg
my oldboy02.txt oldboy02.jpg
my oldboy03.txt oldboy03.jpg
my oldboy04.txt oldboy04.jpg
my oldboy05.txt oldboy05.jpg
my oldboy06.txt oldboy06.jpg
my oldboy07.txt oldboy07.jpg
mV oldboy08.txt oldboy08.jpg
my oldboy09.txt oldboy09.jpg
my oldboy10.txt oldboy10.jpg
mv oldboy.txt oldboy.jpg
awk
以:和空格做分割符,防止连续:和空格导致输出空值
[root@oldboyedu~]#awk -F “[ :]+” ‘/^Zhang/{print $1,$2,$5}’ awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
显示第三列以41开头的ID号码的人的全名和ID号码 [root@oldboyedu~]#awk ‘$3~/^41/{print $1,$2,$3}’ awk_test.txt
Zhang Dandan 41117397
Liu Bingbing 41117483
BEGIN{}在ak执行命令前显示表头
[rooteoldboyedu ~]#awk ‘BEGIM{print"姓",“名",Qg号",”捐款记录"}{print $0}’ awk_test.txt Icolumn -t
姓 名 QQ号 捐款记录
Zhang Dandan 41117397 :250💯175
Zhang Xiaoyu 390320151 :155:90:201
column -t:表示每一列自动对齐
[root@oldboyedu~]#awk -F “:” ‘{print $2}’ awk_ test.txt
250
155
[rootQoldboyedu~]#awk ‘BEGIN{FS=":"}{print $2}’ awk_test,txt
250
155