一、语句块外面使用: ‘/REG/{action}’ 只写正则
默认在$0即整行中查找匹配 或指定某个字段
‘$1 ~ /REG/{action}’
不匹配使用 !~ 或者 ~!
二、条件判断语句中使用正则:
和上面类似,比如
if( 变量 ~ /正则/){print "ok"} 三、函数中使用正则:gsub( Ere, Repl, [ In ] )
sub( Ere, Repl, [ In ] )
match( String, Ere )
split( String, A, [Ere] )awk 'pattern {action}' file
awk:指令名称
pattern:过滤器
action:动作
pattern是过滤器,在逐行处理的过程中,可以使用过滤器过滤掉不需要的行,或者过滤出需要的行。而过滤器可以有以下几种方式:
使用正则表达式来过滤,将要过滤的内容放在 / /中。
比如,过滤包含hello行:
==(相等)、 ~ (包含)、! ~ (不包含)、&&(且)、||(或)
示例:
test.txt内容如下:
过滤第一个字段等于“hello”的行
过滤出第一个字段包含“hello”的行
过滤出第一个字段不包含“hello”的行
过滤出包含“hello”且包含“world”的行
过滤出包含“hello”或者包含“meituan”的行
由两个pattern组成,begpat和endpat,中间使用逗号(,)分割,begpat表示匹配的开始位置,endpat表示匹配的结束位置
示例
test1.txt内容如下:
过滤出第一个字段是“hello” 到 “baidu”的行
使用语法是 awk 'BEGIN{}{}END{action}',指定 initialization 和 cleanup 规则。
示例
test2.txt内容如下:
求最大值
类似2.4,只不过是规则更复杂
匹配所有行,不过滤任何内容
test.txt内容如下:
打印test.txt的内容
FS:分隔符,默认空格
NR:当前行
NF:当前记录字段个数
$0:当前记录
$0 ~ n:当前记录中的第n个字段
示例
test3.txt内容:
打印每行每个字段用#连接起来
打印第2 ~ 第5行的内容
打印第2 ~ 第5行的内容最后一个字段
gsub(s,r): 在$0中,使用r代替s
index(s,t): 返回s中t的第一个位置
length(s) :s的长度
match(s,r) :s是否匹配r
substr(s,p) :返回s中从p开始的子串
https://www.gnu.org/software/gawk/manual/html_node/Patterns-and-Actions.html#Patterns-and-Actions
grep -vE "[0-9]{1,2}(\:[0-9]{1,2}){2}" file
用正则把直接取时间固定格式 xx:xx:xx 时分秒 ,然后grep -E正则扩展,-v反匹配,这两个参数合起来用,就过滤到时间所在的行了,不能象他们那样过虑特定字符,万一字符变了呢?只有时间固定格式全球统一,绝不会变!
正则的含义:[0-9]的数字 {1,2}出现一到两次 (\:转译冒号[0-9]{1,2}即[0-9]的数字出现一到两次)然后小括号里的出现2次,这样就组合成了任意 小时,分钟和秒了。
给分吧~~
[yuechengjun@localhost ~]$ grep -vE "[0-9]{1,2}(\:[0-9]{1,2}){2}" aaa
总和为: 133
组播为: 131
点播为: 1
总和为: 136
组播为: 128
点播为: 5
总和为: 130
组播为: 123
点播为: 4
总和为: 126
组播为: 124
点播为: 2
总和为: 127
组播为: 123
点播为: 1
总和为: 133
组播为: 124
点播为: 3
总和为: 131
组播为: 123
点播为: 4
总和为: 127
组播为: 122
点播为: 3
评论列表(0条)