简单的 grep sed awk

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,p' 文件信息代表末尾

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

  1. 删除文件信息
    sed -i '/^#/p' config
    PS:
  1. -i参数后面不能再跟上其他参数
  2. -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 's#CEO#CIO#g' person.txt --- 指定条件进行替换 sed -i "s#Init_IP#Change_IP#g"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 奥找表格的形式一列一列呈现


image.png

显示xiaoyu的姓氏和ID号码 NR表示行信息 number row 行号的意思

a 可以根据行号信息进行处理
将xiaoyu信息进行匹配
awk 'NR==2' /oldboy/awk_test.txt

根据需求进行处理
awk 'NR==2{print 13}' /oldboy/awk_test.txt

执行过程:
[root@linux67 ~]# awk 'NR==2{print 1,3}' /oldboy/awk_test.txt
Zhang 390320151
[root@linux67 ~]# awk 'NR==2{print 1" "3}' /oldboy/awk_test.txt
Zhang 390320151
说明: awk取出多列信息可以使用 , 或者 " " 进行分隔

b 可以根据内容信息进行处理 ~是匹配的意思
思路1) 将xiaoyu信息进行匹配
awk '$2~/Xiaoyu/' /oldboy/awk_test.txt

思路2) 根据需求进行处理
awk '2~/Xiaoyu/{print1,$3}' /oldboy/awk_test.txt

awk可以对列分隔符号进行修改 -F "分隔符号"

awk -F ":" '{print 3}' test.txt awk可以对列分隔符号进行修改, 并且可以指定多个分隔符号 -F "[分隔符号01分隔符号02]" awk -F "[:>]" '{print3}' test.txt
awk '1~/Zhang/' awk_test.txt awk -F "[ :]+" '1~/Zhang/{print 1,2,$5}' awk_test.txt

显示所有以41开头的ID号码的人的全名和ID号码

awk '3~/^41/{print1,2,3}' awk_test.txt
awk '3~/^41/{print1,2,3}' awk_test.txt |column -t

显示所有ID号码最后一位数字是1或5的人的全名

awk '3~/1|5/' awk_test.txt awk '3~/[15]$/' awk_test.txt

显示全名信息:awk '3~/[15]/{print 1,2}' awk_test.txt
显示所有ID号码最后一位数字不是1或5的人的全名:
awk '3~/[02346789]/{print 1,2}' awk_test.txt
awk '3~/[^15]/{print 1,2}' awk_test.txt
awk '3!~/[15]/{print 1,2,$3}' awk_test.txt

显示Xiaoyu的捐款,每个捐款数值都有以开头, 如110220330

awk -F "[: ]+" '2~/Xiaoyu/{print ""4,""5,""6}' awk_test.txt awk '2~/Xiaoyu/{print 4}' awk_test.txt |sed 's#:##g'
awk '2~/Xiaoyu/{print4}' awk_test.txt |tr ':' '' print : 输出指定的信息 gsub : 替换指定的信息 gawk substitute -- gsub gsub(//,"",x) --> gsub(/要替换的信息/,"替换成什么信息",第几列信息做替换) gsub(/:/,"",)
awk '2~/Xiaoyu/{gsub(/:/,"",NF);printNF}' awk_test.txt
15590201 说明: NF表示列信息,NF表示最后一列, ? 倒数第二列 == 3NF == 4 - 1 错误理解 oldboy linux edu 50(NF-1) (NF)(4-1) 44==NF==50NF-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}' awk_test.txt |column -t END: 在文件处理之后完成相应操作 awk 'BEGIN{print "姓","名","ID","捐款记录"}{print0}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"}2~/Xiaoyu/{print name,1,2}' awk_test.txt oldgirl Zhang Xiaoyu [root@linux67 oldboy]# awk 'BEGIN{name="oldgirl"}2~/Xiaoyu/{print "name",1,2}' awk_test.txt
name Zhang Xiaoyu

[root@linux67 oldboy]# awk -F "[ :]+" '1~/Zhang/{print1,2,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk 'BEGIN{FS="[ :]+"}1~/Zhang/{print1,2,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90
[root@linux67 oldboy]# awk -vFS="[ :]+" '1~/Zhang/{print1,2,5}' awk_test.txt
Zhang Dandan 100
Zhang Xiaoyu 90

内置变量:
NR : 表示行的信息
NF : 表示列的信息
FS : 表示指定分隔符号

  1. 可以实现信息统计
    如何进行累加运算 --> 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;print i}' test.txt 1 2 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 [root@linux67 oldboy]# awk '(NF-1)~/男生/{i=i+1}END{print "班级男生数量:",i}' test.txt
班级男生数量: 3

如何进行求和运算 ---> i=i+nn表示需要进行求和运算列信息
武佳伟 Linux67 小白 15000 男生 大学 15000 做求和运算 i=i+4 --> i=0+15000 print i 15000 顾宏磊 Linux67 经验 13000 男生 大专 13000 做求和运算 i=i+4 --> i=15000+13000 print i 28000
柴仁义 Linux67 毕业 12000 男生 大学 12000 做求和运算 i=i+4 --> i=28000+12000 print i 40000 随文悦 Linux67 肄业 14000 女生 大学 14000 做求和运算 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;print i}' test.txt 15000 28000 40000 54000 [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
人员捐款记录表

作用:

  1. 输出最终结果信息
    说明: $0 将每一列信息都进行输出
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341