正则三剑客-awk
2017-08-04 00:00
99 查看
awk与前两个不同之处是支持分段处理;
#mkdir awk; cp /etc/passwd awk/passwd //前期准备,创建一个awk目录并copy passwd到 awk目录下。
# awk -F ':' '{print $1}' passwd
-F:指定分隔符 //打印passwd的第一段
$1:第一段 ,
$2:第二段,
$0:整行
# awk -F ':' '{print $0}' passwd -F:指定分隔符 //打印passwd的整行全部内容
如果不指定分隔符,默认是空格
# awk -F ':' '{print $1,$3,$4}' passwd //同时打印第1,3,4段
#awk -F ':' '{print $1
"#"$3
"#"$4}' passwd //指定打印结果以某个字符分割
AWK的匹配功能:
# awk '/oo/' passwd //匹配oo的行
# awk -F ':' '
$1 ~ /oo/' passwd //精确匹配第一段包含oo的行
# awk -F ':' '$1 ~ /
o+/' passwd //精确匹配第一段
包含o一次或多次的行
#awk -F ':' '/root/{print $1"@"$3} /user/ {print $3,$4}' passwd //匹配root的行打印第一段和第三段并且使用@隔断;且同时匹配user的行打印第三段和第四段
# awk -F ':' '/root|user/ {print $0}' passwd //测试上面的是否正确,同时使用这种写法别上面更容易理解
# awk -F ':' '$3>=1000 {print $0}' passwd //第三段大于等于1000的打印整行
# awk -F ':' '$3==1000 {print $0}' passwd //第三段等于1000的打印整行(
注意是==),如果写成了=既代表着赋值
# awk -F ':' '$3>=
"1000" {print $0}' passwd //第三段
Ascll码大于等于1000的打印整行,
如果针对数字一定不要添加
""
# awk -F ':' '$7!="/sbin/nologin" {print $0}' passwd //打印出第七段不等于/sbin/nologin的行!(如果是字符串,一定要加双引号)
AWK的数学运算功能:
# awk -F ':'
'$3<=$4 {print $0}
' passwd //打印出第四段大于等于第三段的行
# awk -F ':' '$3>"5" && $4<"7" {print $0}' passwd //第三段大于”5“
且第四段小于”7“的行(这里的5和7均是双引号,代表着ascll码)
&& 必须要同时满足两个条件
# awk -F ':' '$3>1000 || $7=="/sbin/nologin" {print $0}' passwd //第三段大于1000
或者 第7段等于/sbin/nologin的行
|| 满足任意一个都会打印出来
# awk -F ':' '$3>1000 || $4 ~ /bash/ {print $0}' passwd //
3ff0
第三段大于1000 或者 匹配第7段为bash的行
# awk -F ':'
'{OFS="#"}$3>1000 || $4 ~ /bash/ {print $1,$3,$4}
' passwd OFS:指定分隔符(
记得添加双引号) //指定分隔符为#然后打印出符合条件的段
# awk -F ':' '{OFS="#"} {print $1,$3,$4}' passwd //打印所有的行中的第1,3,4段
# awk -F ':' '{OFS="#"}
{if($3>1000) {print $1,$3,$4}
}' passwd //指定打印第三段大于1000的行然后打印第1,3,4,段(注意
{})
NR:表示行 NF:表示段
#
awk -F ':' 'NR<=10' passwd //打印出前十行
在日常的运维工作当中,我们一般会把正则应用到shell脚本当中,熟能生巧!多练习才是王道!!
#mkdir awk; cp /etc/passwd awk/passwd //前期准备,创建一个awk目录并copy passwd到 awk目录下。
# awk -F ':' '{print $1}' passwd
-F:指定分隔符 //打印passwd的第一段
$1:第一段 ,
$2:第二段,
$0:整行
# awk -F ':' '{print $0}' passwd -F:指定分隔符 //打印passwd的整行全部内容
如果不指定分隔符,默认是空格
# awk -F ':' '{print $1,$3,$4}' passwd //同时打印第1,3,4段
#awk -F ':' '{print $1
"#"$3
"#"$4}' passwd //指定打印结果以某个字符分割
AWK的匹配功能:
# awk '/oo/' passwd //匹配oo的行
# awk -F ':' '
$1 ~ /oo/' passwd //精确匹配第一段包含oo的行
# awk -F ':' '$1 ~ /
o+/' passwd //精确匹配第一段
包含o一次或多次的行
#awk -F ':' '/root/{print $1"@"$3} /user/ {print $3,$4}' passwd //匹配root的行打印第一段和第三段并且使用@隔断;且同时匹配user的行打印第三段和第四段
# awk -F ':' '/root|user/ {print $0}' passwd //测试上面的是否正确,同时使用这种写法别上面更容易理解
# awk -F ':' '$3>=1000 {print $0}' passwd //第三段大于等于1000的打印整行
# awk -F ':' '$3==1000 {print $0}' passwd //第三段等于1000的打印整行(
注意是==),如果写成了=既代表着赋值
# awk -F ':' '$3>=
"1000" {print $0}' passwd //第三段
Ascll码大于等于1000的打印整行,
如果针对数字一定不要添加
""
# awk -F ':' '$7!="/sbin/nologin" {print $0}' passwd //打印出第七段不等于/sbin/nologin的行!(如果是字符串,一定要加双引号)
AWK的数学运算功能:
# awk -F ':'
'$3<=$4 {print $0}
' passwd //打印出第四段大于等于第三段的行
# awk -F ':' '$3>"5" && $4<"7" {print $0}' passwd //第三段大于”5“
且第四段小于”7“的行(这里的5和7均是双引号,代表着ascll码)
&& 必须要同时满足两个条件
# awk -F ':' '$3>1000 || $7=="/sbin/nologin" {print $0}' passwd //第三段大于1000
或者 第7段等于/sbin/nologin的行
|| 满足任意一个都会打印出来
# awk -F ':' '$3>1000 || $4 ~ /bash/ {print $0}' passwd //
3ff0
第三段大于1000 或者 匹配第7段为bash的行
# awk -F ':'
'{OFS="#"}$3>1000 || $4 ~ /bash/ {print $1,$3,$4}
' passwd OFS:指定分隔符(
记得添加双引号) //指定分隔符为#然后打印出符合条件的段
# awk -F ':' '{OFS="#"} {print $1,$3,$4}' passwd //打印所有的行中的第1,3,4段
# awk -F ':' '{OFS="#"}
{if($3>1000) {print $1,$3,$4}
}' passwd //指定打印第三段大于1000的行然后打印第1,3,4,段(注意
{})
NR:表示行 NF:表示段
# awk -F ':' '{print NR"#"$0}' passwd //打印行号,类似于grep -n 1#root:x:0:0:root:/root:/bin/bash 2#bin:x:1:1:bin:/bin:/sbin/nologin
[root@zhdy-02 awk]# awk -F ':' '{print NF"#"$0}' passwd //打印每行有多少段 7#root:x:0:0:root:/root:/bin/bash 7#bin:x:1:1:bin:/bin:/sbin/nologin
#
awk -F ':' 'NR<=10' passwd //打印出前十行
[root@zhdy-02 awk]# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync //打印前十行,且第一段包含root或sync的行
[root@zhdy-01 awk]# awk -F ':' '{print $NR"#"$NF}' passwd root#/bin/bash x#/sbin/nologin 2#/sbin/nologin 4#/sbin/nologin lp#/sbin/nologin /sbin#/bin/sync /sbin/shutdown#/sbin/shutdown #/sbin/halt #/sbin/nologin //NR从1开始,$1是第1行第7段,$2是第2行第7段,。。。$7是第7行第7段。
[root@zhdy-01 awk]# awk -F ':' '{OFS=":"} $1="ROOT"' passwd //把第一段全部赋值“ROOT” ROOT:x:0:0:root:/root:/bin/bash ROOT:x:1:1:bin:/bin:/sbin/nologin ROOT:x:2:2:daemon:/sbin:/sbin/nologin ROOT:x:3:4:adm:/var/adm:/sbin/nologin
[root@zhdy-01 awk]# awk -F ':' '{(tot=tot+$3)}; END{print tot}' passwd 5945 //自定义一个tot,把第三段求和
在日常的运维工作当中,我们一般会把正则应用到shell脚本当中,熟能生巧!多练习才是王道!!
相关文章推荐
- shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
- 正则三剑客 之 awk
- shell 正则表达三剑客--awk
- shell四剑客之awk
- shell 正则表达三剑客--grep
- Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
- Linux系统编程(19)——正则表达式在sed和awk中的使用
- grep正则表达式规范 在sed、awk及C语言中用正则表达式
- 正则表达式 awk (转自大家网)
- 某网友总结的grep、sed、awk、perl等对正则表达式的支持的差别,谁给贴个网址
- 20151204正则第六部分(awk小扩展)
- 用awk获得匹配的正则表达式,完成Perl中的功能
- 文本处理三剑客之grep与正则表达式
- 正则、grep、sed、awk
- LINUX 三剑客老大(AWK) 日常工作总结
- CentOS7 正则表达式-egrep,sed,awk
- awk 正则匹配指定字段次数统计
- Shell正则表达式与grep、sed、awk的特点
- 正则表达式之awk