ubuntu 在运算符末尾添加额外字符时,Grep不起作用

fumotvh3  于 2023-03-29  发布在  其他
关注(0)|答案(2)|浏览(131)

我用这个命令grepping(Ubuntu)多个文件:

LANG=en_US.UTF-8 grep  -P -R -i -I -H -A1 "^name#.*?r[AÀÁÂÃÄaàáâãä]f[AÀÁÂÃÄaàáâãä][EÈÉÊËeèéêë]l s[IÌÍÎÏiìíîï]m[OÔÒÓÕÖoòóôõö].*?#.*?#.*?#.*?#.*?\$" image_args_*

它返回几个结果,其中包括:

image_args_search_134.txt:name#Rafael Simões Vieira#1767###Emerenciana Rodrigues de Oliveira
image_args_search_134.txt-#bati.#134#somelinkhere.com##
--

但如果我添加[Ee]作为运算符的一部分,如下所示:

LANG=en_US.UTF-8 grep  -P -R -i -I -H -A1 "^name#.*?r[AÀÁÂÃÄaàáâãä]f[AÀÁÂÃÄaàáâãä][EÈÉÊËeèéêë]l s[IÌÍÎÏiìíîï]m[OÔÒÓÕÖoòóôõö][EÈÉÊËeèéêë].*?#.*?#.*?#.*?#.*?\$" image_args_*

那我就什么都得不到
为什么?谢谢!

but5z9lq

but5z9lq1#

从我的观察来看,看起来你想使用所有适合给定字母的变音符号。在正则表达式的概念中,你可以使用 * 等价类 *。
等价类表达式应表示属于等价类的一组排序元素,如排序顺序中所述。只能识别主要等价类。应通过将等价类中的任何一个排序元素包含在括号-equal中来表示该类([==])分隔符。例如,如果'a'、'à'和'-'属于相同的等价类,则[[=a=]b][[=à=]b]、和[[=â=]b]都等价于[aàâb]。如果排序元素不属于等价类,则等价类表达式应被视为排序符号。
所以你可能想写一些基于:

$ grep -i 'r[[=a=]]f[[=a=]][[=e=]]l s[[=i=]]m[[=o=]][[=e=]]s' file1 file2 file3

请注意,这在PCRE中并不存在,因此您只需要使用扩展正则表达式:

$ grep -A1 -iIREH '^name#[^#]*r[[=a=]]f[[=a=]][[=e=]]l s[[=i=]]m[[=o=]][[=e=]]s[^#]*(#[^#]*){4}$' *
z4iuyo4d

z4iuyo4d2#

我只看到你的问题,如果我使用一些未安装的区域设置。
请验证所需的区域设置是否已激活(未被前导#推荐)

grep "en_US" /etc/locales.gen

# en_US ISO-8859-1
# en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8

(The文件/etc/locales.gen可以通过删除注解#来根据您的需要进行配置)
确保真正生成了这些配置的区域设置:

sudo update-locale

相关问题