Con GNU sed:
sed -E 's/[[:alpha:]]+/\u&/3'
Scriverebbe in maiuscolo la terza sequenza di lettere da ciascuna riga.
Per capitalizzare ogni terza sequenza di lettere in ogni riga:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Per capitalizzare ogni terza sequenza di lettere nell'intero input , con GNU awk:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
O con perl:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Mentre la [[:alpha:]]classe di caratteri può essere un po 'casuale su alcuni sistemi (ad esempio su sistemi GNU, che include molti numeri con l'esclusione di quelli arabi (0123456789)), Perl \p{...}si basa sulle proprietà dei caratteri Unicode. Quindi quelli \p{alpha}includeranno lettere in tutti gli alfabeti e anche caratteri alfabetici non di lettere.
Non includerà la combinazione dei segni diacritici, ma ciò significa che parole come Stéphanesarebbero considerate come due parole separate.
Quindi potresti voler invece:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Anche se questo potrebbe finire, compresi troppi.
Inoltre, al contrario di GNU sed, Perl \utrasformerà correttamente parole come fiddle(dove fiè un carattere di legatura) in Fiddle(2 caratteri Fe i).