Gawk matching
From wikinotes
regex
Used to filter lines, like grep.
echo ' 1920x1080 foo 5760x1080 ' | awk '$0 ~ /[0-9]+x[0-9]+/ { print $0 }'
match
match checks for a matching string, returns char number if found, otherwise returns a 0
match($0, "searchterm") if (match($0, "searchterm")) { print "hi" }echo "abcdefg" | awk '{var=match($0, "cd"); print var}' #> 3 echo "abcdefg" | awk '{var=match($0, "zef"); print var}' #> 0 echo "abcdefg" | awk '{ if(match($0, "cd")) { print "match found"; } }' #> match foundThe matched text is identified using global variables.
RSTART // the first matching character RLENGTH // the number of matching characters totalYou can extract the value using
substr()
.echo "abc_def_hij" | awk '{ success = match($0, "_[a-z]+_"); if (success) { print substr($0, RSTART, RLENGTH); } }'
match-ranges
Similar to sed, awk can operate on ranges between two matches.
# print lines between 'config:' and the end of input zpool status zroot | awk '/^config:/,/end/ { print $0 }'
Substitution
foo = "/dev/ada0p1" sub(/p[0-9]+$/, "", $foo) // search/replace first gsub(/a/, "b", $foo) // search/replace all