grep的一些命令参数
-A num:匹配到搜索到的行以及该行下面的num行
-B num:匹配到搜索到的行以及该行上面的num行
-C num:匹配到搜索到的行以及上下各num行
-i ---忽略字符大小写的差别
-c ---计算符合样式的列数
-v ---显示不包含匹配文本的所有行
-o ---只显示匹配部分
-E ---支持扩展正则
-n ---标示出该行的列数编号
-r ---以递归的方式查找符合条件的文件
-w ---只显示全字符合的列
三剑客sed命令概念介绍
作用说明: stream editor for filtering and transforming text
文件处理编辑命令
原理过程: 按照文件每行信息进行处理, 找出符合条件信息, 执行相应操作
语法结构: sed [参数] '条件 指令操作' 文件信息
如何进行查询
a 按照行号查询信息
查找单行信息: sed -n '3p' 文件信息
查找多行信息: sed -n '2,4p' 文件信息 连续多行
sed -n '2p;4p' person.txt 不连续多行
sed -n '2,代表末尾
b 按照字符查询信息
查找单行信息: sed -n '/CTO/p' person.txt
查看多行信息: sed -n '/CTO/,/CIO/p' person.txt
sed -n '/CTO/p;/CIO/p' person.txt
如何进行删除
sed -i '6d' person.txt
sed -i.bak '/COO/d' person.txt --- 将源文件内容先进行备份, 在进行操作
sed -ri '/CFO|CTO/d' person.txt
坑: 删除一个文件有#号的行
1) 查询需要删除内容
sed -n '/^#/p' config
- 删除文件信息
sed -i '/^#/p' config
PS:
- -i参数后面不能再跟上其他参数
- -i参数和-n参数尽量不要结合使用
-i : 真正修改文件内容
sed显示行号 sed ‘=’ xxx.txt | xargs -n2
如何进行添加
3a: 在第三行的下面添加相应信息
3i: 在第三行的上面添加相应信息
添加多行: \n 转移换行
sed -i '2a103,Alex,COO\n104,yy,CFO' person.txt
-e : 表示可以识别多个操作信息
sed -e '2i103,Alex,COO' -e '3a104,yy,CFO' person.txt
如何进行修改
sed 参数 's#需要替换信息#替换成什么信息#g' 文件信息
sed 'Init_IP#File_info --- 指定变量信息做替换需要注意双引号使用
后向引用前项替换:
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\1#g'
12
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\2#g'
34
[root@linux67 scripts]# echo 1234567890|sed -r 's#.*#<&>#g'
<1234567890>
练习题: 利用sed命令取出IP地址信息
思路1) 显示出IP地址
ip a s eth0
思路2) 有IP地址的行显示出来
ip a s eth0|sed -n '3p'
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
思路3) 取出IP地址
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)#\1#g'|sed -r 's#(.*)/24.*$#\1#g'
sed -r 's#^.*et (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)/24.*$#\1#g'
sed -n '3p'
sed -r 's#^.*et (.*)/24.*$#\1#g'
ip a s eth0|sed -nr '3s#^.*et (.*)/24.*$#\1#gp'
sed命令应用总结
sed命令参数总结:
-n : 取消默认输出
-e : 识别多操作指令
-r : 识别扩展正则
-i : 真正编辑修改文件内容
sed命令指令信息:
p : 输出显示指定信息
d : 删除指定信息
s : 替换指定信息
g : 全局替换信息
a : 添加指定信息在相应行的后面
i : 插入指定信息在相应行的前面
c : 将一行信息进行替换修改 sed '2c oldxuan' 1.txt 把1.txt的第二行改成了oldxuan
三剑客awk命令概念介绍
概念说明: pattern scanning and processing language
模式识别和脚本编写
执行原理: 按行处理文件信息, 根据匹配条件信息, 完成相应操作动作
语法结构: awk [参数] '模式信息(条件) {动作}' 文件信息
如果想对文件里的格式加以调整可以使用column -t 奥找表格的形式一列一列呈现
显示xiaoyu的姓氏和ID号码 NR表示行信息 number row 行号的意思
a 可以根据行号信息进行处理
将xiaoyu信息进行匹配
awk 'NR==2' /oldboy/awk_test.txt
根据需求进行处理
awk 'NR==2{print 3}' /oldboy/awk_test.txt
执行过程:
[root@linux67 ~]# awk 'NR==2{print 3}' /oldboy/awk_test.txt
Zhang 390320151
[root@linux67 ~]# awk 'NR==2{print 3}' /oldboy/awk_test.txt
Zhang 390320151
说明: awk取出多列信息可以使用 , 或者 " " 进行分隔
b 可以根据内容信息进行处理 ~是匹配的意思
思路1) 将xiaoyu信息进行匹配
awk '$2~/Xiaoyu/' /oldboy/awk_test.txt
思路2) 根据需求进行处理
awk '1,$3}' /oldboy/awk_test.txt
awk可以对列分隔符号进行修改 -F "分隔符号"
awk -F ":" '{print 3}' test.txt
awk '1~/Zhang/{print 2,$5}' awk_test.txt
显示所有以41开头的ID号码的人的全名和ID号码
awk '1,3}' awk_test.txt
awk '1,3}' awk_test.txt |column -t
显示所有ID号码最后一位数字是1或5的人的全名
awk '|53~/[15]$/' awk_test.txt
显示全名信息:awk '/{print 2}' awk_test.txt
显示所有ID号码最后一位数字不是1或5的人的全名:
awk '/{print 2}' awk_test.txt
awk '/{print 2}' awk_test.txt
awk '/{print 2,$3}' awk_test.txt
显示Xiaoyu的捐款,每个捐款数值都有以110330
awk -F "[: ]+" '"""2~/Xiaoyu/{print #g'
awk '4}' awk_test.txt |tr ':' 'x) --> gsub(/要替换的信息/,"替换成什么信息",",)
awk '",NF}' awk_test.txt
90NF表示最后一列, ? 倒数第二列 == NF == (NF-1) ((4-1) 4==NF-1==50-1=49
总结:
awk用到的参数: -F 指定列分隔符号
awk用到的动作: print 输出指定的信息
gsub 替换指定的信息
awk内置的变量: NR 表示行号信息
NF 表示列号信息
三剑客awk命令高级使用
模式概念:
匹配条件信息 普通
a 根据正则信息进行
b 根据范围信息进行
匹配连续的多行
[root@linux67 oldboy]# cat test.txt
01 oldboy python
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
06 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR>2' test.txt
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
06 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR<5' test.txt
01 oldboy python
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
[root@linux67 oldboy]# awk 'NR>2 && NR<5' test.txt
03 oldboy path
04 oldboy ptzh
[root@linux67 oldboy]# awk 'NR==2,NR==5' test.txt
02 oldboy ptone
03 oldboy path
04 oldboy ptzh
05 oldboy ptzh
匹配不连续多行
[root@linux67 oldboy]# awk 'NR==2||NR==5||NR==7' test.txt
02 oldboy ptone
05 oldboy ptzh
07 oldboy ptzh
[root@linux67 oldboy]# awk 'NR==2;NR==5;NR==7' test.txt
02 oldboy ptone
05 oldboy ptzh
07 oldboy ptzh
特殊模式
BEGIN: 在文件处理之前完成相应操作
awk 'BEGIN{print "姓","名","ID","捐款记录"}{print 0}END{print "人员捐款记 录表"}
可以实现数值运算 --- 计算器
[root@linux67 oldboy]# awk 'BEGIN{print 2+3}'
5
[root@linux67 oldboy]# awk 'BEGIN{print 2-3}'
-1
[root@linux67 oldboy]# awk 'BEGIN{print 2*3}'
6
[root@linux67 oldboy]# awk 'BEGIN{print 2^3}'
8
[root@linux67 oldboy]# awk 'BEGIN{print 2/3}'
0.666667
内置变量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符号
[root@linux67 oldboy]# awk 'BEGIN{name="oldgirl"}1,2~/Xiaoyu/{print "name",2}' awk_test.txt
name Zhang Xiaoyu
[root@linux67 oldboy]# awk -F "[ :]+" '1,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk 'BEGIN{FS="[ :]+"}1,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk -vFS="[ :]+" '1,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
内置变量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符号
- 可以实现信息统计
如何进行累加运算 --> i=i+1 初始i=0 经过一次运算 i=1 经过运算 i=2
说明:
[root@linux67 oldboy]# awk '$(NF-1)~/男生/' test.txt
武佳伟 Linux67 小白 15000 男生 大学 匹配一次男生信息 做一次运算 i=i+1 == i=0+1 i=1
顾宏磊 Linux67 经验 13000 男生 大专 匹配二次男生信息 做一次运算 i=i+1 == i=1+1 i=2
柴仁义 Linux67 毕业 12000 男生 大学 匹配三次男生信息 做一次运算 i=i+1 == i=2+1 i=3
实现过程:
[root@linux67 oldboy]# awk '(NF-1)~/男生/{i=i+1}END{print i}' test.txt
3
[root@linux67 oldboy]# awk '(NF-1)~/男生/{i=i+1}END{print "班级男生数量:",i}' test.txt
班级男生数量: 3
如何进行求和运算 ---> i=i+n表示需要进行求和运算列信息
武佳伟 Linux67 小白 15000 男生 大学 15000 做求和运算 i=i+4 --> i=15000+13000 print i 28000
柴仁义 Linux67 毕业 12000 男生 大学 12000 做求和运算 i=i+4 --> i=40000+14000 print i 54000
[root@linux67 oldboy]# cat test.txt
武佳伟 Linux67 小白 15000 男生 大学
顾宏磊 Linux67 经验 13000 男生 大专
柴仁义 Linux67 毕业 12000 男生 大学
随文悦 Linux67 肄业 14000 女生 大学
[root@linux67 oldboy]# awk '{i=i+4}END{print i}' test.txt
54000
[root@linux67 oldboy]# awk '{i=i+$4}END{print i/4}' test.txt
13500
END: 在文件处理之后完成相应操作
[root@linux67 oldboy]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{print $0}END{print "人员捐款记 录表"} awk_test.txt
姓 名 ID 捐款记录
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
人员捐款记录表
作用:
- 输出最终结果信息
说明: $0 将每一列信息都进行输出