文本处理器 grep/awk/sed
grep:文本过滤器
grep ‘pattern’ input_file …
sed:流编辑器
awk:报告生成器
格式化后显示
a.k.a Aho, Kernighan and Weinberger
默认使用空格作为分隔符
new awk: nawk
# awk [options] ‘script’ file1 file2 …
示例:
awk ‘{print $1,$4}’ t.txt # 只打印2个列
awk ‘BEGIN{OFS=”:”}{print $1,$2,$3}’ t.txt # 换分隔符
awk的输出:
awk ‘BEGIN{OFS=”:”}{print $1,$2,$3,”bill”}’ t.txt # 插入自定义输出
awk -F: ‘/^r*/{print $3}’ /etc/passwd # 以r起始的
awk -F: ‘$3>=500{print $1,$3}’ /etc/passwd
awk -F: ‘$3-4000>=500{print $1,$3}’ /etc/passwd
awk -F: ‘$7~”bash$”{print $3,$1,$7}’ /etc/passwd # 以bash结尾的
awk -F: ‘$7!~”bash$”{print $3,$1,$7}’ /etc/passwd # 和上面取反
awk -F: ‘$3==0,$7~”bash”{print $1,$3,$7}’ /etc/passwd
awk -F: ‘$3==0,$7~”nologin”{printf “%10s%10s%20s\n”,$1,$3,$7}’ /etc/passwd # 多个逻辑条件是||的关系
awk -F: ‘BEGIN{print “Username Id Shell”}$3==0,$7~”nologin”{printf “%10s%10s%20s\n”,$1,$3,$7}’ /etc/passwd #上面的基础上利用BEGIN打印表头
awk -F: ‘BEGIN{print “Username Id Shell”}$3==0,$7~”nologin”{printf “%10s%10s%20s\n”,$1,$3,$7}END{print “process finsh!”}’ /etc/passwd # 在上面的基础上(END)打印表尾
awk -F: ‘{if ($1==”root”)print $1,”Admin”;else print $1,”Common User”}’ /etc/passwd