З GNU sed:
sed -E 's/[[:alpha:]]+/\u&/3'
Буде використовувати велику літери третьої послідовності літер з кожного рядка.
Щоб використовувати великі літери у кожній третій послідовності літер у кожному рядку:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Використовуйте великі літери кожної третьої послідовності літер у вхідному тексті за допомогою GNU awk:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
Або з perl:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Хоча [[:alpha:]]клас символів може бути дещо випадковим у деяких системах (наприклад, у системах GNU, що включає багато цифр за винятком арабських (0123456789)), Perl \p{...}заснований на властивостях символів Unicode. Таким чином, \p{alpha}вони включатимуть букви в усіх алфавітах, а також небуквені алфавітні символи.
Він не включатиме поєднання діакритики, хоча це означає, що такі слова, як, наприклад Stéphane, вважатимуться двома окремими словами.
Тому ви можете замість цього:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Хоча це може закінчитися, включаючи занадто багато.
Також зауважте, що всупереч GNU sed, Perl \uправильно трансформує такі слова, як fiddle(де fiодин символ лігатури), у Fiddle(2 символи Fта i).