Nếu tôi có một dòng như:
Thhiisss iisss mmyyy nameeee
Tôi muốn in cái này như:
This is my name
Lệnh unix cho việc này là gì?
Nếu tôi có một dòng như:
Thhiisss iisss mmyyy nameeee
Tôi muốn in cái này như:
This is my name
Lệnh unix cho việc này là gì?
Câu trả lời:
Trên hệ thống GNU, bạn sẽ cần sử dụng sed
hoặc tương tự nếu ngôn ngữ của bạn sử dụng các ký tự đa nhân ( như jimmij gợi ý ) vì GNU tr
chỉ có thể tham chiếu một ký tự cho mỗi byte. Trong ngôn ngữ ASCII, bạn có thể xóa tất cả các bản sao w / tr
like:
LC_ALL=C tr -s '\0-\255' <input
Vì thế...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... bản in ...
This is my name
Bạn cũng có thể thực hiện một cách chọn lọc bằng cách tham khảo các mục tiêu của mình theo phạm vi:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...hoặc là...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... cái nào cũng giống nhau và cả hai đều in:
Thhiisss iisss mmyyy nameeee
... hoặc sử dụng [:punct:]
, [:digit:]
, [:lower:]
, [:alpha:]
hoặc bất cứ điều gì bạn muốn. Bạn cũng có thể phủ nhận lựa chọn w / -c
vì vậy ...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... bản in ...
TTTThis is my name