Mit GNU sed:
sed -E 's/[[:alpha:]]+/\u&/3'
Würde die dritte Folge von Buchstaben aus jeder Zeile groß schreiben.
So schreiben Sie jede dritte Buchstabenfolge in jeder Zeile groß :
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
So schreiben Sie mit GNU jede dritte Buchstabenfolge in der gesamten Eingabe groß awk:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
Oder mit perl:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Während die [[:alpha:]]Zeichenklasse auf einigen Systemen etwas zufällig sein kann (z. B. auf GNU-Systemen, die viele Ziffern enthalten, mit Ausnahme der arabischen (0123456789)), \p{...}basiert Perl auf Unicode-Zeicheneigenschaften. Diese \p{alpha}enthalten also Buchstaben in allen Alphabeten sowie alphabetische Zeichen ohne Buchstaben.
Es wird jedoch keine Kombination von Diakritika enthalten, was bedeutet, dass Wörter wie Stéphaneals zwei separate Wörter betrachtet werden.
Vielleicht möchten Sie stattdessen:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Dies kann jedoch zu vielen führen.
Beachten Sie auch, dass sedPerl im Gegensatz zu GNU \uWörter wie fiddle(wobei fiein Ligaturzeichen ist) korrekt in Fiddle(2 Zeichen Fund i) umwandelt .