【发布时间】:2021-01-25 13:01:21
【问题描述】:
我有一个包含以下内容的文本文件:
**gvožđa gvozda gvozdja
гвожђа
这是四个字,但每个都意味着一件事:铁。
“d”、“dj”、“đ”、“ђ”是四个字母,表示一个“电话”。
我正在使用以下 grep 公式来搜索这三个词:
grep '\s*[gг][vв]o[žжz](dj|[dđђ])a\s*' filename
这个 grep 命令根本没有输出。为什么? 它应该在文件中给出所有这些词:
gvožđa
gvozda
gvozdja
гвожђа
【问题讨论】:
-
你忘记了
-E,grep -E '\s*[gг][vв]o[žжz](dj|[dđђ])a\s*'。或者转义|(将在 GNUgrep中工作),以及(和),因为您使用的是 POSIX BRE 模式。 -
使用
grep -E不能解决这个问题。 -
如果我运行这个
egrep '\s*[gг][vв]o[žжz](dj|[dđђ])a\s*' filename,那么我会得到这个输出:gvožđa gvozda gvozdja 但没有得到这个гвожђа。它也应该给出这个:гвожђа. -
正确,您没有在问题中解释问题。发生这种情况是因为西里尔字母
а不等于 ASCIIa字母。o和о也是如此。使用grep -Eo '[gг][vв][oо][žжz](dj|[dđђ])[aа]'。其实我不明白你为什么用\s*。
标签: regex grep regex-group cyrillic