awk正则匹配

不使用grep单独使用awk,打印匹配行

ll | awk '{s=tolower($0)} s~/do/'

drwxr-xr-x. 3 jj jj 114 May 17 15:07 Documents
drwxr-xr-x. 2 jj jj   6 Apr 10 00:14 Downloads

如上,ll本输出当前目录,使用awk,忽略大小写,匹配字符串,

如果只是单独这样,grep完全可以满足,awk可以做更精细的操作,如输出空格分隔的第5个参数

ll | awk '{s=tolower($0)} s~/do/ {print $5}'

114
6

不匹配的行做其他输出,

ll | awk 'BEGIN{OFS="-";IGNORECASE=1;line="hello";count=10}{line=line""$5} {count+=$5;if(match($0,/do/,a)){print NR,$0,NF,a[0]}else{print NR,"no match"}} END{print count,line}'
1-no match
2-no match
3-drwxr-xr-x. 3 jj jj 114 May 17 15:07 Documents-9-Do
4-drwxr-xr-x. 2 jj jj   6 Apr 10 00:14 Downloads-9-Do
5-no match
6-no match
7-no match
8-no match
9-no match
323-hello:163114666666

如果line和count不需要初始化,可以省去初始化操作,;line="hello";count=10

参数初始化还可以使用-v参数

ll | awk -v line="guagua" -v count=11 'BEGIN{OFS="-";IGNORECASE=1}{line=line""$5} {count+=$5;if(match($0,/do/,a)){print NR,$0,NF,a[0]}else{print NR,"no match"}} END{print count,line}'
1-no match
2-no match
3-drwxr-xr-x. 3 jj jj 114 May 17 15:07 Documents-9-Do
4-drwxr-xr-x. 2 jj jj   6 Apr 10 00:14 Downloads-9-Do
5-no match
6-no match
7-no match
8-no match
9-no match
324-guagua163114666666

OFS表示输出分隔符,其他内置变量可以查看文档

IGNORECASE=1表示忽略大小写,这样match才能匹配到不区分大小写的字符串

$0表示整行

match表示字符串匹配,match第三个参数是array,a[0]表示正则表达式中的匹配,1表示第一个括号匹配,2表示第二个括号中的匹配,如下o就是第二个括号中的匹配

ll | awk -v line="guagua" -v count=11 'BEGIN{OFS="-";IGNORECASE=1}{line=line""$5} {count+=$5;if(match($0,/(i).*(o)./,a)){print NR,$0,NF,a[2]}else{print NR,"no match"}} END{print count,line}'
1-no match
2-drwxr-xr-x. 2 jj jj 163 Jun 20 20:40 Desktop-9-o
3-drwxr-xr-x. 3 jj jj 114 May 17 15:07 Documents-9-o
4-drwxr-xr-x. 2 jj jj   6 Apr 10 00:14 Downloads-9-o
5-no match
6-no match
7-no match
8-no match
9-drwxr-xr-x. 2 jj jj   6 Apr 10 00:14 Videos-9-o
324-guagua163114666666
发布了275 篇原创文章 · 获赞 46 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/youyudexiaowangzi/article/details/93910898
今日推荐