tr 不替换撇号

Nic*_*oul 4 character-encoding unicode tr

我想将此文件中的所有撇号转换为X

Bob's book
Bob’s book
Bob?s book  # (Might look the same but actually different)
Run Code Online (Sandbox Code Playgroud)

第一个撇号按预期替换:

$ cat file | tr "'" "X"
BobXs book
Bob’s book
Bob?s book
Run Code Online (Sandbox Code Playgroud)

但是另外两种撇号,奇怪的事情发生了:

$ cat file | tr "’" "X"
Bob's book
BobXXXs book
BobXX?s book

$ cat file | tr "?" "X"
Bob's book
BobXX?s book
BobXXXs book
Run Code Online (Sandbox Code Playgroud)

如何使它工作?

jw0*_*013 8

tr以字节为单位工作,这意味着它不适用于像 UTF-8 这样的多字节编码。我所知道的唯一解决方案是找到一个tr支持 Unicode的版本,或者切换到sed其他一些可以进行字符串替换的工具。

  • `sed -e "s/'/X/"` 有效。 (2认同)