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