【问题标题】:How to search for non-ASCII characters with bash tools?如何使用 bash 工具搜索非 ASCII 字符?
【发布时间】:2012-11-28 01:56:07
【问题描述】:

我有一个大文本文件,其中包含一些导致 LaTeX 崩溃的 unicode 字符。如何在 Linux bash 中使用 sed 等在文件中查找非 ASCII 字符?

【问题讨论】:

  • 它是 UTF-8 格式的文件吗,大多数字符是 ASCII,但有些是格式良好的多字节 UTF-8,有些是损坏的(多字节)UTF-8?是否有许多格式正确(多字节)的 UTF-8 字符?还是完全是其他编码?

标签: bash unicode grep


【解决方案1】:

试试:

nonascii() { LANG=C grep --color=always '[^ -~]\+'; }

可以这样使用:

printf 'ŨTF8\n' | nonascii

[]^ 内表示“不”。所以[^ -~] 表示不在空格和~之间的字符。因此,不包括控制字符,它匹配非 ASCII 字符,并且是更便携但精度稍差的[^\x00-\x7f] 版本。 \+ 表示 1 or more 并将让多字节字符在完整字符周围显示颜色,而不是散布在每个字节中,从而破坏多字节序列

【讨论】:

  • 你能解释一下'[^ -~]\+' 是什么意思吗? ^ 是 afaik 行的开始。
  • 非常好。但是找到了控制字符(换行符除外),尽管它们确实是 ASCII。因此,当有选项卡、回车符(dos 文件)时,就会找到它们。你能提供一个只打印非 ASCII 字符的替代方案吗?另一个答案中的[^\x00-\x7f] 方法对我也不起作用。
  • 超级好用!干杯:)
【解决方案2】:

试试这个命令:

grep -P '[^\x00-\x7f]' file

【讨论】:

  • @JonasStein 请添加-P(--perl-regex) 选项。
  • 注意:-P 选项在 BSD grep 中不起作用,这是 OSX 中提供的一种
  • @nacho4d 那还能做什么呢?
  • 直接跳过。例如:grep '[^\x00-\x7f]' file
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2012-04-19
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多