Title here
Summary here
gawk
默認使用 ERE 模式。
首先創建 foo
文本文件。
cat <<EOF > foo
a1,a2,a3
b1,b2,b3
EOF
gawk -F, '/1,a/{ print $1 }' foo
a1
呢度係用整行去匹配嘅,等價於 $0
。
$2 ~
指定咗使用第 2 個字段匹配。
gawk 'BEGIN{ FS="," } $2 ~ /^[ab]2/{ print $2 }' foo
a2
b2
Substitution,替換第一個匹配嘅字符串。
sub(regex, replacement [, target])
regex
:匹配嘅正則表達式。replacement
:替換匹配嘅字符串。target
:可選,目標字符串,默認 $0
。唔提供 target
,默認係整行匹配。
echo "aa bb aa" | gawk '{ sub(/aa/, "cc"); print }'
cc bb aa
指定替換第 3 列。
echo "aa bb aa" | gawk '{ sub(/aa/, "cc", $3); print }'
aa bb cc
echo "app cat" | gawk '{ sub(/\w+/, "[&]"); print }'
[app] cat
Global Substitution,全局替換。
gsub(regex, replacement [, target])
regex
:匹配嘅正則表達式。replacement
:替換匹配嘅字符串。target
:可選,目標字符串,默認 $0
。唔提供 target
,默認係整行匹配。
echo 'aa bb aa' | gawk '{ gsub("aa", "cc"); print }'
cc bb cc
指定替換第 3 列。
echo 'aa bb aa' | gawk '{ gsub("aa", "cc", $3); print }'
aa bb cc
echo "app cat" | gawk '{ gsub(/\w+/, "[&]"); print }'
[app] [cat]
\<
表示單詞嘅開頭。
echo 'app cat' | gawk '{ gsub(/\<[a-z]/, "[&]"); print }'
[a]pp [c]at
\>
表示單詞嘅結尾。
echo 'app cat' | gawk '{ gsub(/[a-z]\>/, "[&]"); print }'
ap[p] ca[t]
General Substitution,通用替換。
sub
同 gsub
強大。sub
同 gsub
唔支持捕獲組。gensub(regex, replacement, how [, target])
regex
:匹配嘅正則表達式。replacement
:替換字符串,可用捕獲組。how
:可指定全局或第 N 次匹配替換。target
:可選,目標字符串,默認 $0
。使用 g
全局替換。
echo "aa aa aa" | gawk '{ print gensub(/aa/, "bb", "g") }'
bb bb bb
替換第 2 個匹配項。
echo "aa aa aa" | gawk '{ print gensub(/aa/, "bb", "2") }'
aa bb aa
\1
表示第一個匹配參數。
echo "aa-bb" | gawk '{ print gensub(/(\w+)-(\w+)/, "\\2:\\1", "g")}'
bb:aa