Tr: 17 13 ตัวละคร
(หรือ14 10 ถ้าคุณนับเพียงข้อโต้แย้ง ... )
tr -s ta-s -1
วิ่งตัวอย่าง:
bash-4.3$ tr -s ta-s -1 <<< heads
1
bash-4.3$ tr -s ta-s -1 <<< tails
-1
คำอธิบายสั้น ๆ :
tr
หมายถึงตัวแปลหมายถึงแทนที่อักขระแต่ละตัวของอินพุตที่พบในอาร์กิวเมนต์แรกด้วยอักขระที่ตำแหน่งเดียวกันในอาร์กิวเมนต์ที่สอง:
tr ta -1 <<< tails # replaces t ⇢ -, a → 1
⇒ -1ils
หากอาร์กิวเมนต์แรกยาวกว่าอักขระที่ไม่มีตำแหน่งที่ตรงกันในอาร์กิวเมนต์ที่สองจะถูกแทนที่ด้วยอักขระตัวสุดท้ายของอาร์กิวเมนต์ที่สอง:
tr tals -1 <<< tails # replaces t ⇢ -, a → 1, l → 1, s → 1
⇒ -1i11
เมื่อใช้-s
( --squeeze-repeats
) ตัวเลือกอักขระต่อเนื่องซึ่งจะถูกแทนที่ด้วยอักขระเดียวกันจะถูกแทนที่พร้อมกัน:
tr -s tals -1 <<< tails # replaces t ⇢ -, a → 1, l+s → 1
⇒ -1i1
ดังนั้นหากเราระบุตัวละครทั้งหมดใน“ ก้อย” เราจะได้สิ่งที่เราต้องการ:
tr -s tails -1 <<< tails # replaces t ⇢ -, a+i+l+s → 1
⇒ -1
เช่นเดียวกับ“ heads” แต่ต้องการเก็บ“ t” ไว้ข้างหน้าเพื่อลบเครื่องหมายลบ (อักขระที่เรียงตามตัวอักษรเพื่อความน่าขยะแขยง):
tr -s taedhs -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
การรวมอักขระที่ไม่ซ้ำกันทั้งหมดของ "ก้อย" และ "หัว" ในอาร์กิวเมนต์แรกเดียวการรักษา "t" ไว้ด้านหน้านำไปสู่การแก้ปัญหาขั้นสุดท้าย:
tr -s tadehils -1 <<< tails # replaces t → -, a+i+l+s → 1
⇒ -1
tr -s tadehils -1 <<< heads # replaces h+e+a+d+s → 1
⇒ 1
เพื่อหลีกเลี่ยงการแจกแจงอักขระช่วงเวลาจาก- เป็นรูปแบบสามารถใช้แทนได้