sed 命令无法删除特殊字符(版权和商标符号)

sed 命令无法删除特殊字符(版权和商标符号)

我试图使用 sed 命令删除版权字符。但它不起作用。以下是正在使用的命令。

sed 's/; © E/; (c)/g' input.txt > output.txt

但是当我使用vi编辑器打开文件时,它显示\251

你能帮我一下吗?

答案1

感谢大家。

我得到了 perl 中的解决方案:

perl -lape 's/[^[:print:]]*//g'

答案2

您可以使用令人讨厌的技巧来使用十六进制代码来完成这项工作。例如,在默认的 UTF-8 ascii 中,您可以使用 which is 打印'\x27引号的十六进制代码。

echo -e "\x27hello\x27"
'hello'

版权符号不是默认 ascii 表的一部分,而是属于扩展 ascii 代码。您还可以将扩展 ascii 打印为十六进制代码的组合

(根据建议http://www.fileformat.info/info/unicode/char/a9/index.htm

echo -e '\xc2\xa9'
©

同样,您可以在 sed 中使用这些十六进制代码

a="hello ©"
sed 's/\xc2\xa9/??/' <<<"$a"  ##replacing copyright symbol with two questionmarks
hello ??

如果代表版权符号的 \xc2\xa9 不起作用,您可以尝试 \xe2\x92\xb8,它是“带圆圈的拉丁文大写字母 C”。

也可以尝试\o251(使用小写字母“o”,而不是零)。

相关内容