1

我正在尝试使用 sed 删除文本文件 (.csv) 中的所有 £ 符号,但是它不起作用,我不知道为什么。有什么建议么?基本上使用:

sed -i 's/£//g' file.csv

语言环境的输出:

LANG=en_GB.UTF-8
LANGUAGE=
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

更新:

所以,我不知道为什么 sed 不起作用,但是 tr -d '\243' < inputfile 确实有效!感谢@devnull!

4

3 回答 3

2

这可能对您有用(GNU sed):

sed 's/o\302\o243//g' file

请注意,如果您对 sed 如何查看特定字符有疑问,请使用该l命令,并且 sed 将显示所看到的字符(在本例中为八进制)。例如

echo '£' | sed 'l'
\302\243$

八进制代码后面的美元表示字符串的结尾。

对于长字符串使用l0这将防止包装。

于 2013-08-06T11:06:53.603 回答
1

使用十六进制代码作为井号。

似乎不同平台上的不同版本,sed的行为非常不同。我刚刚得到了 GNU 版本并且工作正常。

在使用 sed 之前,应该阅读“我什么时候不应该使用 sed ”部分

于 2013-08-06T10:22:31.807 回答
1

你试过了吗:

sed "s/\xA3//" inputfile

或者,您可以使用tr

tr -d '\243' < inputfile
于 2013-08-06T10:39:38.220 回答