-s
Beralih:Pencet (hapus karakter berulang)
echo i am a good boy | tr -s good bad
keluaran:
i am a bd bdy
Ada dua hal yang terjadi di balik layar yang membuat hal ini terjadi. Pertama, jika argumen kedua adalah tr
lebih pendek dari yang pertama daripada karakter terakhir di arg ke-2 diulang untuk membuatnya sama panjang dengan yang pertama. Jadi perintah yang setara adalah:
echo i am a good boy | tr -s good badd
Hal lain yang terjadi adalah ketika karakter dalam argumen pertama diulang, mereka menimpa kejadian sebelumnya (saya mengacu pada dua oo
ada di good
). Ini membuat perintah sekarang setara dengan:
echo i am a good boy | tr -s god bdd
(o
kedua ke d
penggantian menimpa o
sebelumnya ke a
penggantian, membuatnya berlebihan)
Tanpa -s
alihkan outputnya menjadi
i am a bddd bdy
Dengan -s
alihkan tr
'memeras' setiap karakter berulang yang tercantum di terakhir argumen meninggalkan hasil akhir:
i am a bd bdy
-c
Ganti:Pelengkap
-c
switch digunakan untuk mencocokkan komplemen dari argumen pertama (yaitu semua karakter yang tidak tercantum dalam arg 1). Akibatnya, arg 1 akan berisi banyak huruf (256-3). Sekarang, hal yang sama terjadi pada arg 2 seperti pada kasus sebelumnya:karakter terakhir Arg 2 diulangi agar sesuai dengan panjang atau Arg 1. Jadi pernyataan aslinya:
echo i am a good boy | tr -c good bad
setara dengan:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(perhatikan g
yang hilang , o
dan d
di set pertama, perhatikan juga bahwa d
akan mengganti setiap karakter lain di set kedua -- termasuk karakter spasi)
Inilah mengapa i am a good boy
berubah menjadi dddddddgoodddodd
Info lebih lanjut di sini:http://www.linuxjournal.com/article/2563
Pemahaman Anda tentang -s
salah, itu menggantikan kemunculan berulang karakter di set 1 di input dengan satu karakter. itu tidak mengubah set, misalnya.
echo i am a good boy | tr -s god bad
memberi
i am a bad bay
-c
opsi menggantikan set 1 dengan komplemennya (mis. set semua karakter yang tidak terdapat dalam set 1). Anda dapat menggunakan ini untuk menghapus semua kecuali karakter yang ditentukan misalnya.
echo i am a good boy | tr -cd gobdy
output
goodboy