linux初学之grep sed awk 正则表达基本例子

. 表示任意一个 (数字,#,空格,特殊符号,字母)

*表示0个或多个*号前面的字符

+表示一个或多个+前面的字符

?表示一个或零个前面的字符

.*表示任意一个任意字符(贪婪的匹配方法)

?,+,(),|,{},[]需要脱意

参数:

 -c  一用有多少行

-An n为数字,这一行以及下面(After)n行打印出来

-Bn n为数字,这一行以及上面n(Bfore)行打印出来

-Cn n为数字,上下n行打印出来

[root@localhost ~]#grep -n ‘root‘ 1.txt 打印出含有root的行并显示行数

-n  过滤关键词的行并显示出在第几行

技术分享技术分享技术分享

[root@localhost ~]#grep -v ‘root‘ 1.txt |wc -l   不含有root的行,统计一共有几行

-v 表示取反

-o 只显示符合的对象

[root@localhost ~]#gerp ‘^[0-9]‘ 1.txt                  以数字开头

^ 表示行首 eg ^5 以5为开头

$ 表示行尾 eg 5& 以5为结尾

^$ 表示空行

[0-9]表示0-9其中任意一个 [a-zA-Z]表示任意字母

[^0-9]在中括号里面加^表示取反:以非数字开头,空行不会打印出来


[root@localhost ~]#grep -v ‘^$‘ 1.txt|grep -v ‘^#‘       去掉空行和#号开头的行


[root@localhost ~]#grep ‘r.o‘ 1.txt    r与0之间存在一个字符

.表示任意一个字符,可以是空格,数字,特殊符号

技术分享



[root@localhost ~]#grep -E ‘r?o‘ 1.txt        一个或者零个r ="o" "ro"

-E=egrep ?为特殊符号,+也需要-E 

?表示一个或者零个?前面的字符


[root@localhost ~]#grep ‘r*o‘ 1.txt            零个或者多个r  =>0

*表示0个或多个*号前面的字符  


[root@localhost ~]#grep -E ‘r+o‘ 1.txt           一个或者多个  >=1

+表示一个或者多个前面的字符 需要加参数-E

技术分享

[root@localhost ~]#grep ‘(oo)+‘ 1.txt  表示含有一个或者多个(oo)

(  )括号里面的内容为一个整体

技术分享

[root@localhost ~]#grep -E ‘root|sbin‘ 1.txt  包含root或者sbin

| 表示或者的意思 需要加-E

 

[root@localhost ~]#grep -E ‘o{2}‘ 1.txt     出现两次o

{} 里面的数字表示前面的字符出现的次数 需要加-E 或者使用\脱意[root@localhost ~]#grep -E ‘o\{2\}‘ 1.txt




sed

sed可以实现找出指定的行,更多的是实现替换

[root@localhost ~]#sed -n ‘1,$‘p 1.txt    打印出全部内容

不加-n 会打印2次, -n与p一起用


[root@localhost ~]#sed -n ‘1‘p 1.txt     打出第1行

 ‘1‘p   n位数字,表示打出指定的1行; 

 ‘1,2‘ n,m为数字,打印指定n到m行



实现grep功能

[root@localhost ~]#sed -n ‘/root/‘p 1.txt 打印出有root的行



实现删除的功能

[root@localhost ~]#sed  ‘/root/‘d 1.txt  删除含有root的行


[root@localhost ~]#sed -i  ‘/r*o/‘d 1.txt

[root@localhost ~]#sed  ‘1,3‘d 1.txt  删除1到3行

支持r*o 这种类型 不需要加-n

-i可以直接修改原文件

-r 特殊符号不用脱意

替换功能

[root@localhost ~]#sed ‘s/root/123/g‘  1.txt     用123替换root

标准格式为 sed ‘s///‘ 或者sed ‘s###

加上g 为全局

[root@localhost ~]#sed ‘5,10s/root/123/g‘  1.txt  指定5到10行


[root@localhost ~]#sed -n -e ‘/root/‘p  -e ‘s/root/123/g‘ 1.txt    选取root行并123替换root

[root@localhost ~]#sed -n ‘/root/p; /lp/p‘           同时进行多条命令

-e 可以加多个命令,;两者输出顺序有差别


[root@localhost ~]#sed -n ‘s/ROOT/123/ig‘   不区分大小写,123替换ROOT和root

 i选项只能用在替换



[root@localhost ~]#sed -r   ‘s#(^.*)(:.*:)(/.*$)#\3\2\1#‘  filename



替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5

[root@localhost ~]#sed -r ‘s#(id:)3(:initdefault:)#\15\2#g‘ /etc/inittab

(id:)==\1  (:initdefault:)==\2  3改成5

[root@localhost ~]#sed -r ‘s#id(.*)#1\1#g‘ /etc/inittab  把id改成1

.*代表id后面一部分





awk


awk类似于cut

[root@localhost ~]#awk -F: ‘{print $3,$4,$5}‘  1.txt  截取第3段第4段第5段

[root@localhost ~]#awk -F: ‘OFS="@" {print $3,$4,$5}‘


[root@localhost ~]#awk ‘/root/‘  1.txt    查找有root的行



[root@localhost ~]#awk -F:‘$3==3‘ 1.txt  找出以冒号为分割第3行为3的数

[root@localhost ~]#awk -F:‘$1==“root”‘ 1.txt 找出第一行为root的行,root需要“” 引起来 

 假如只有一个= 等于赋值,要两个=


[root@localhost ~]#a=3;awk -F: ‘$3="‘$a‘"‘ 1.txt    打印出第3行

要在awk里面引入变量需要双引号加单引号



[root@localhost ~]#awk -F:‘$1~/oo/‘ 1.txt 第一行包含有oo的

~为模糊匹配


[root@localhost ~]#awk -F:‘/root/; $1~/hjd/; $3~/50/‘ 1.txt  包含有root或者第一行模糊含有hjd或第3行50的行

; 相当于sed -E 可以多个条件匹配;条件符合几次就会出现几次

条件操作符:

>    <   ==  !=    >=    <=

[root@localhost ~]#awk -F: ‘$1>=500‘ 1.txt 第一段大于等于500

假如是数字则不需要加“”  字符串需要加“”


[root@localhost ~]#awk -F ‘{print NF}‘1.txt  以冒号为分割分割成几段

NF段数 

[root@localhost ~]#awk -F ‘NR>40‘ 1.txt   打印40行以外的行

NR显示行数 可加条件判断

 

    




技术分享



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。