Tôi muốn thay thế một bộ ký tự bằng các ký tự tương ứng từ một bộ khác, đại loại như thế này:
original set: ots
"target" set: u.x
foobartest → fuubar.ex.
Các bản dịch / phiên âm như thế này là đặc sản của tr
lệnh:
$ echo 'foobartest' | tr 'ots' 'u.x'
fuubar.ex.
Thật không may tr
, không hỗ trợ thay đổi tập tin tại chỗ như sed
không.
Tôi muốn sử dụng sed
vì vậy tôi không phải phát minh lại bánh xe của các tệp tạm thời.
tr
(chính xác) bỏ qua đệ quy trong các bộ thay thế: echo 'abc' | tr ab bx
→ bxc
. Một giải pháp nguyên thủy có thể làm thịt xxc
nó bởi vì nó áp dụng lại bản dịch cho các ký tự đã được dịch.
sed
trái với GNU tr
có thể chuyển ngữ các ký tự nhiều byte)