awk 正则使用

awk条件
1,使用正则作为条件 ~包含 !~不包含
awk -F: ‘$1~/root/{print}’ user 输出第1列包含root的行
awk -F: ‘$1!~/root/{print}’ user 输出第1列不包含root的行
awk -F: ‘$1!~/root/’ user 省略写法,效果同上
2,使用数字,字符串做条件
比较符号:==(等于) !=(不等于) >(大于)

=(大于等于) <(小于) <=(小于等于)

awk 'NR==1{print}' user   输出第一行
awk 'NR==1' user 	省略写法,效果同上
awk 'NR>2' user   输出大于第二行的行
awk -F: '$3<10{print}' /etc/passwd  输出第3列(uid)小于10的行
awk -F: '$3<10' /etc/passwd  效果同上
awk -F: '$3<10{print $3}' /etc/passwd  找到第3列小于10的行,并输出第3列
awk -F: '$3>=1000' /etc/passwd  输出uid大于等于1000的账号信息

3,逻辑测试条件
条件1 && 条件2 {print} 两个条件都满足才执行print任务
条件1 || 条件2 {print} 有任何一个条件满足就执行print任务

awk 'NR>=2&&NR<=4' user   输出2~4行
awk -F: 'NR>=2&&NR<=4{print $1}' user 找2~4行并输出第1列
awk -F: 'NR==4 ||NR==5{print $1}' user 找4行或5行并输出第1列
awk -F: 'NR>=10 || NR<=20{print $1}' user 找10行以及大于10行的内容, 或者20以内的行, 相当于所有行,再显示第1列
awk -F: 'NR<10 && NR>20{print $1}' user 不存在的行,逻辑错误

#!/bin/bash
user=awk -F: '/bash$/{print $1}' /etc/passwd
for i in $user
do
grep $i /etc/shadow | awk -F: ‘{print $1 “–>” $2}’
done

发布了14 篇原创文章 · 获赞 0 · 访问量 200

猜你喜欢

转载自blog.csdn.net/nbnbnb_/article/details/103898302
今日推荐