Wednesday 27 February 2019

regex - awk extract multiple groups from each line



How do I perform action on all matching groups when the pattern matches multiple times in a line?



To illustrate, I want to search for /Hello! (\d+)/ and use the numbers, for example, print them out or sum them, so for input



abcHello! 200 300 Hello! Hello! 400z3
ads

Hello! 0


If I decided to print them out, I'd expect the output of



200
400
0

Answer




This is a simple syntax, and every awk (nawk, mawk, gawk, etc) can use this.



{
while (match($0, /Hello! [0-9]+/)) {
pattern = substr($0, RSTART, RLENGTH);
sub(/Hello! /, "", pattern);
print pattern;
$0 = substr($0, RSTART + RLENGTH);
}
}


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...