6

我正在尝试安装一个正则表达式,它可以在文件中获取一些单词,其中该单词的所有字母都与单词模式匹配。

我的问题是,正则表达式找不到重音词,但在我的文本文件中有很多重音词。

我的命令行是:

cat input/words.txt | grep '^[éra]\{1,4\}$' > output/words_era.txt
cat input/words.txt | grep '^[carroça]\{1,7\}$' > output/words_carroca.txt

文件的内容是:

carroça
éra
éssa
roça
roco
rato
onça
orça
roca

我该如何解决?

4

5 回答 5

11

如果您的文件以 ISO-8859-1 编码,但您的系统语言环境是 UTF-8,这将不起作用。

将文件转换为 UTF-8 或将系统区域设置更改为 ISO-8859-1。

# 在 grepping 之前从 ISO-8859-1 转换为环境语言环境
# 输出将在当前语言环境中
$ iconv -f 8859_1 输入/words.txt | grep ...

# 使用 ISO-8859-1 语言环境运行 grep
# 输出将采用 ISO-8859-1 编码
$ cat 输入/words.txt | 环境 LC_ALL=en_US grep ...
于 2011-01-19T19:26:52.170 回答
1

我在这里找到了一个似乎有效的相关问题。

因此,如果您尝试以下操作:

cat input/words.txt | LANG=C grep '^[éra]\{1,4\}$' > output/words_era.txt

这会产生你所期望的吗?

于 2011-01-19T19:18:11.390 回答
1

假设一切都是 UTF-8,我通常只使用类似的东西

perl -CSAD -le 'print if /^carroça{1,3}$/' filenames

因为那时我知道它在做什么。

于 2011-01-19T21:51:00.053 回答
0

试试@dule 说的,但是用LANG=en_US.iso88591

cat input/words.txt | LANG=en_US.iso88591 grep '^[éra]\{1,4\}$' > output/words_era.txt
于 2011-01-19T19:24:57.457 回答
0

我的问题是,正则表达式找不到重音词,但在我的文本文件中有很多重音词。

我的命令行是:

cat input/words.txt | grep '^[éra]\{1,4\}$' > output/words_era.txt
cat input/words.txt | grep '^[carroça]\{1,7\}$' > output/words_carroca.txt

[...]

我该如何解决?

Grep 搜索这些文件,就好像它们是字节流(8 位字符)一样。这些字符也必须符合您当前的语言环境设置。

如果您的words.txt文件以 UTF-8、UTF-16 或 UTF-32 编码,情况会变得更糟。或 ISO-8859-1 (latin-1)。

要处理所有此类编码,请使用ugrep而不是 grep 来处理以 UTF 编码的文件并匹配 Unicode 模式:

cat input/words.txt | ugrep '^[éra]\{1,4\}$' > output/words_era.txt
cat input/words.txt | ugrep '^[carroça]\{1,7\}$' > output/words_carroca.txt

这会产生以 UTF-8 编码的输出。如果输入文件以 ISO-8859-1 编码,则使用带有选项的 ugrep -QISO-8859-1。但是,ugrep 输出始终是 UTF-8。

于 2020-01-13T22:02:39.703 回答