С GNU awk
или любой другой совместимой с POSIX awk
реализацией (неmawk
)и правильным набором локали:
$ LANG='en_US.UTF-8' gawk -v pat='æa' -- '
{
s = $0;
pos = 0;
while (match(s, pat)) {
pos += RSTART-1;
print "file", FILENAME ": line", FNR, "position", pos, "matched", substr(s, RSTART, RLENGTH);
pos += RLENGTH;
s = substr(s, RSTART+RLENGTH);
}
}
' <<<'aöæaæaæa'
file -: line 1 position 2 matched æa
file -: line 1 position 4 matched æa
file -: line 1 position 6 matched æa
$
Шаблон, указанный в аргументе -v pat
для gawk
, может быть любым допустимым регулярным выражением.