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