Điều này nên thực sự đơn giản, nhưng vì một số lý do, nó không hoạt động:
sed -i.bak -E 's/\t/ /' file.txt
Thay vì thay thế các ký tự tab, nó thay thế các t
ký tự. Tôi đã thử mọi biến thể về điều này mà tôi có thể nghĩ ra, chơi với trích dẫn, v.v. Tôi đã Googled và thấy mọi người khác sử dụng các biểu thức khá giống nhau và họ dường như làm việc với chúng.
Đây -E
là một điều OS X. Tôi nghĩ rằng sự thất bại có thể là kết quả của một số điều kỳ quặc kỳ lạ của OS X sed
, vì vậy tôi cũng đã thử nó với Ruby (không có -i
) và nhận được kết quả tương tự:
ruby -pe '$_.gsub!(/\t/," ")' < file.txt > file.new
Tôi đang sử dụng Bash 3.2.51 trên OS X và iTerm, mặc dù tôi không thể thấy bất kỳ thứ nào trong số đó có thể liên quan khủng khiếp như thế nào. Tôi chưa đặt bất kỳ biến môi trường kỳ lạ nào, mặc dù tôi có thể đăng bất kỳ biến nào mà bạn nghĩ có thể có liên quan.
Điều gì có thể sai?
CẬP NHẬT : Tôi phải thực hiện một số sai lầm khác hoặc typo khi tôi thử phiên bản Ruby, kể từ khi Gilles chỉ ra rằng nó không làm việc (và tôi đã không bao giờ có ông chỉ đạo cho tôi sai!). Tôi không chắc chuyện gì đã xảy ra, nhưng tôi khá chắc chắn đó là lỗi của tôi.
\t
trongsed
tuyên bố vớiCTRL-V<TAB>
nơi<TAB>
là phím tab vàCTRL-V
là chìa khóa điều khiển vàv
ép lại với nhau.