Opsi pelengkap di tr

2

Saya tidak dapat memahami opsi complement(-c) dalam trperintah yang digunakan bersama dengan mode ganti (yang tanpa opsi lain), misalnya:

gema "a" | tr -cab

Mengapa itu menghasilkan:

ab root @ Slack

( abstring tanpa baris baru)?

Mulligan
sumber
Anda menggunakan adan bsebagai trargumen, tetapi masuk eke output?
techraf
Jawaban ini akan membantu Anda: superuser.com/questions/1155362/complement-option-in-tr
Alessandro Dotti Contra
@ adc ?? Itu adalah tautan ke pertanyaan ini .
DavidPostill
1
Saya mendapat absebagai output untuk kode Anda di komputer saya, sebagaimana mestinya: Ini menggantikan semuanya kecuali adengan b, dan itu termasuk baris baru dari gema . Saya tidak tahu mengapa Anda mendapatkannya e.
dirkt
@ techraf Maaf saya membuat kesalahan ketik - hasilnya memang ab. Terima kasih atas perhatian Anda.
Mulligan

Jawaban:

3

tr perintah memproses semua karakter, termasuk yang tidak dicetak.

echo dalam contoh Anda menghasilkan output yang terdiri dari dua karakter:

  • a
  • karakter baris baru ( \n)

Dalam panggilan Anda, Anda diperintahkan truntuk mengganti semua karakter yang melengkapi a(dengan kata sederhana: selain a) dengan b, jadi:

  • itu meninggalkan akarakter utuh
  • mengganti karakter baris baru dengan b.

Pertimbangkan mengujinya dengan printf(yang tidak secara implisit menambahkan baris baru ke akhir, seperti echohalnya)

Ini menghasilkan input yang sama dengan tras echo, jadi outputnya juga sama:

printf "a\n" | tr -c a b
ab[~]#

Dibandingkan dengan:

printf "a" | tr -c a b
a[~]#

Dan:

printf "a\n\n" | tr -c a b
abb[~]#
techraf
sumber