回到:linux
awk [ -- ] program-text file ... (1) awk -f program-file [ -- ] file ... (2) awk -e program-text [ -- ] file ... (3)
其中:正则表达式
awk语法结构即awk代码部分的结构。shell
awk的语法充斥着pattern{action}
的模式,它们称为awk rule。express
例如:命令行
awk ' BEGIN{n=3} /^[0-9]/{$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"} ' a.txt # 等价的单行式: awk 'BEGIN{n=3} /^[0-9]/{$1>5{$1=333;print $1} /Alice/{print "Alice"} END{print "hello"}' a.txt
上面示例中,有BEGIN语句块,有END语句块,还有2个main代码块,两个main代码块都使用了正则表达式做为pattern。code
关于awk的语法:blog
pattern{action}
能够直接链接连用pattern
,等价于对每一行数据都执行action
awk '{print $0}' a.txt
{action}
,等价于{print}
即输出全部行
awk '/Alice/' a.txt
等价于awk '/Alice/{print $0}' a.txt
action
,表示对筛选的行什么都不作
awk '/Alice/{}' a.txt
pattern{action}
任何一部分均可以省略
awk '' a.txt
对于pattern{action}
语句结构(都称之为语句块),其中的pattern部分能够使用下面列出的模式:ip
# 特殊pattern BEGIN END # 布尔代码块 /regular expression/ # 正则匹配成功与否 /a.*ef/{action} relational expression # 即等值比较、大小比较 3>2{action} pattern && pattern # 逻辑与 3>2 && 3>1 {action} pattern || pattern # 逻辑或 3>2 || 3<1 {action} ! pattern # 逻辑取反 !/a.*ef/{action} (pattern) # 改变优先级 pattern ? pattern : pattern # 三目运算符决定的布尔值 # 范围pattern,非布尔代码块 pattern1, pattern2 # 范围,pat1打开、pat2关闭,即flip,flop模式
action部分,能够是任何语句,例如print。get