Dengan GNU sed
:
sed -E 's/[[:alpha:]]+/\u&/3'
Akan menggunakan huruf kapital urutan ketiga dari setiap baris.
Untuk mengkapitalisasi setiap urutan ketiga huruf di setiap baris:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Untuk mengkapitalisasi setiap urutan ketiga huruf dalam seluruh input , dengan GNU awk
:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
Atau dengan perl
:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Sementara [[:alpha:]]
kelas karakter dapat sedikit acak pada beberapa sistem (misalnya pada sistem GNU, yang mencakup banyak angka dengan mengesampingkan yang berbahasa Arab (0123456789)), Perl's \p{...}
didasarkan pada properti karakter Unicode. Jadi itu \p{alpha}
akan termasuk huruf dalam semua huruf dan juga karakter alfabet non-huruf.
Itu tidak akan termasuk menggabungkan diakritik meskipun yang berarti bahwa kata-kata seperti Stéphane
akan dianggap sebagai dua kata yang terpisah.
Jadi, Anda mungkin ingin sebagai gantinya:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Padahal itu mungkin saja termasuk terlalu banyak.
Juga perhatikan bahwa bertentangan dengan GNU sed
, Perl \u
akan benar mengubah kata-kata seperti fiddle
(di mana fi
satu karakter pengikat) ke Fiddle
(2 karakter F
dan i
).