【问题标题】:Won't delete or replace £ (pound) sign不会删除或替换 £(英镑)符号
【发布时间】:2013-08-06 10:19:53
【问题描述】:

我正在尝试使用 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'

【问题讨论】:

  • 这可能对cyberciti.biz/faq/…有帮助
  • 适用于 Mac,仅供参考。 (但-i 选项在替换部分之前需要一个额外的扩展参数,例如''
  • 也适用于 debian testing。您可以发布locale! 的输出吗?
  • 添加了语言环境输出。谢谢@Keyser,我在 Linux 上,所以理论上 -i 选项应该没问题。

标签: bash csv sed


【解决方案1】:

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

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

注意如果您不确定 sed 如何看到特定字符,请使用 l 命令,sed 将显示它看到的字符(在本例中为八进制)。例如

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

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

对于长字符串,请使用 l0 这将防止换行。

【讨论】:

    【解决方案2】:

    你试过了吗:

    sed "s/\xA3//" inputfile
    

    或者,您可以使用tr

    tr -d '\243' < inputfile
    

    【讨论】:

    • 是的,确实不走运 :( 它在 UFT-8 中,但终端输出显示为�而不是£,如果这是任何线索的话..
    • 第二个 'tr' 有效!只是出于好奇,你知道为什么那个可以工作而不是 sed 吗?谢谢解决!
    • 也许我的 sed 感觉不舒服!这是一个谜!
    • @ElliotReed 你说的是\XA3而不是\xA3(注意区分大小写)?
    • @devnull 这很奇怪,但我无法让 sed 在我的机器上工作。我也试过你的。不知道为什么。
    【解决方案3】:

    对井号使用十六进制代码。

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

    在使用 sed 之前,应该阅读“When should I NOT use sed”部分

    【讨论】:

    • 谢谢!我得到 error= sed: -e expression #1, char 7: unterminated address regex
    • @ElliotReed 我刚刚尝试删除了该建议,并且还收到了解析错误。不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多