Diberikan:
main_east_library
main_west_roof
main_north_roof
minor_south_roof
Bagaimana saya bisa digunakan sed
(khusus, tidak awk
, tr
, dll) untuk membuat:
main_east_Library
main_west_Roof
main_north_Roof
minor_south_Roof
Sesuatu seperti:
$ echo "main_west_library
main_west_roof
main_north_roof
minor_south_roof" | sed 's_\3_upcase(\3)_'
Meskipun itu memberi:
sed: -e expression #1, char 16: Invalid back reference
Jawaban:
Dengan GNU
sed
:Akan menggunakan huruf kapital urutan ketiga dari setiap baris.
Untuk mengkapitalisasi setiap urutan ketiga huruf di setiap baris:
Untuk mengkapitalisasi setiap urutan ketiga huruf dalam seluruh input , dengan GNU
awk
:Atau dengan
perl
: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:
Padahal itu mungkin saja termasuk terlalu banyak.
Juga perhatikan bahwa bertentangan dengan GNU
sed
, Perl\u
akan benar mengubah kata-kata sepertifiddle
(di manafi
satu karakter pengikat) keFiddle
(2 karakterF
dani
).sumber
perl
Itu menghitung 2 urutan karakter yang berakhir dengan garis bawah, lalu huruf besar karakter berikutnya.
sumber
GNU lain
sed
:Ini mengasumsikan bahwa baris selalu dimulai dengan sebuah kata.
sumber