【问题标题】:Why is sed/grep not matching words with diacritics?为什么 sed/grep 不匹配带有变音符号的单词?
【发布时间】:2021-10-07 15:39:20
【问题描述】:

我正在构建一个单词表,并希望使用

从文件中删除变音符号
sed -i -E '/[^a-zA-ZäöüÄÖÜß]/d' wordlist.txt

但是,这不会删除 e。 G。 André 我不明白为什么。 grep 也不输出这一行。我错过了什么?

【问题讨论】:

  • 字符类是否定的,所以我理解的é不包含,因此应该匹配并删除/d
  • 啊,我错过了否定,你是对的。
  • 似乎é 包含在a-z 范围内。我对 Bash 不够熟悉,但我怀疑发生了一些整理。我不确定它是否处于 Bash 级别。我怀疑是这样。我也不确定如何禁用它。
  • 好收获! sed -i -E '/[^a-ef-zA-ZäöüÄÖÜß]/d' wordlist.txt 确实有效 :-) `
  • 可能还有其他校对字符。

标签: regex sed grep debian


【解决方案1】:

您根本缺少的是,这取决于您的语言环境和 Unicode 规范化,其次取决于您的 sed 是否支持这两种工具。

可靠地过滤包含列表中以外的变音符号的行,可能切换到可移植且可靠地支持所有这些 Unicode 概念的工具。

perl -CSD -nle 'print unless /[^a-zA-ZöüÄÖÜß]/' wordlist.txt

有点自相矛盾的是,几乎可以肯定会安装 Perl,而您系统安装的 sed 可能支持也可能不支持这些工具。

【讨论】:

  • 抱歉,我错过了-l 选项 -- 立即尝试。
猜你喜欢
  • 2010-11-28
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
相关资源
最近更新 更多