我似乎无法消除这个°符号。
我努力了:
sed 's/°//g' file.txt
和
sed 's/\°//g' file.txt
但两者都不起作用。
我运行的是 ubuntu 16。
该符号似乎没有被检测到 - 我确实复制并粘贴了。
这也没有做任何事情来找到符号
sed '/°/!d' file.txt
有什么建议么?
答案1
第一个应该已经可以工作了。该符号虽然是非 ASCII 字符,但没有特殊含义。不需要\
,不要投机取巧,如果它应该在没有 的情况下工作\
,那就让它以这种方式工作!就像你会尝试一样
sed 's/ő//g'
在这种情况下,最可能的原因是:
- 编码问题。检查文件使用哪种编码 (
file -szL file.txt
),以及您使用哪种编码 (echo $LANG
)。这是因为“°
”在不同的编码中可以有不同的字节序列。最好都是 utf-8 格式。扩展:Ubuntu 16 默认情况下对 utf-8 友好,顶多在仅限美国的情况下,很老的,不断升级的系统,我能想象这样的编码问题吗?更现实的是,您的文本文件不是 utf-8 格式。命令file
会告诉你。 - 您可以过滤一个相似的角色,但不是确切的角色。在一个不太古老的 utf-8 系统上有数千个可显示的字符,其中许多是像这样的特殊象形文字,它们中的任何一个看起来都非常相似。在这种情况下,解决方案也很简单:
cat
文件,并将字形复制粘贴到命令行中。
如果您按照这些操作,95% 的人就发现并解决了这一点上的问题。剩下的就是10%的情况。
如果这些都不起作用,您可以在最深的字节级别上进行调试。对于你的情况我会这样做:
- 我会首先启动这个
sed
命令,但我会给它/dev/zero
作为源:sed 's/°//g' </dev/zero >/dev/null
。这将导致它将sed
在无限循环中工作,在无限长的零字节流上工作,并且不会当场退出。所以,你可以调试它。 - 使用 ctrl/z 暂停其执行。
- 使用 检查其 pid
pidof sed
。您将获得最多 5 位整数。 - 使用 a
hexcat /proc/12345/cmdline
您将能够看到该 sed 命令行的字节级数据。 °
您可以通过执行相同的操作来检查“”的字节级编码hexcat file.txt
。- 两者必须匹配。如果他们不这样做,则图片中存在一些邪恶,请尝试(2)或提出一个新问题。
许多 Linux 发行版只是hexcat
从发行版中删除了他们最有用的工具之一,因为他们认为没有人使用它。但据我所知,还有其他一些工具,也许xxd
就是其中之一。如果您无法使用任何内容进行六角转储,请在新问题中提出。
答案2
好吧,试试这个简单的方法:
echo "°" | xxd
这将返回类似以下内容:
0000000: c2b0 0a
你需要代码c2b0,我猜0a是换行符。
然后尝试:
sed -e 's/\xc2\xb0//' file.txt
希望有效。