Grep 是否存在包含€;
是否有特定的正则表达式类,包括欧元符号? 根据[:print:]类(AFAIK欧元可打印)和[:putt:]类不包含欧元符号,因为它们只包含区域设置(en_US.UTF-8)和ASCII标点字符(包括$) 是否有另一种解决方案(我想这个问题将与除美元以外的所有货币字符相适应)允许我捕获所有可打印字符 编辑 在玩了putty设置之后,我在打印文件时设法显示了欧元,但是grep-ing它的行为很奇怪。起初我甚至无法打印“€”b,但在将putty编码更改为cp1252(而不是Unicode)后,我可以看到符号。不过,Greping仍然不起作用Grep 是否存在包含€;,grep,Grep,是否有特定的正则表达式类,包括欧元符号? 根据[:print:]类(AFAIK欧元可打印)和[:putt:]类不包含欧元符号,因为它们只包含区域设置(en_US.UTF-8)和ASCII标点字符(包括$) 是否有另一种解决方案(我想这个问题将与除美元以外的所有货币字符相适应)允许我捕获所有可打印字符 编辑 在玩了putty设置之后,我在打印文件时设法显示了欧元,但是grep-ing它的行为很奇怪。起初我甚至无法打印“€”b,但在将putty编码更改为cp1252(而不是Unicode)后,我可以
$ cat test.bah
I can has 5€ ?
$ cat test.bah | grep -o '[[:print:]]*'
I can has 5
?
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
...
显然,在我的机器上:
Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-virtual i686)
grep --version grep (GNU grep) 2.10
bash --version GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
解决方案是使用-p开关并匹配[[:print:]
或不可打印的[^[:print:]
字符:
$ cat test.bah
I can has 5€ or 5£?
$ cat test.bah | grep -P -o '[[:print:]]*'
I can has 5
or 5
?
(顺便说一句,新行是多次匹配的结果,而不是货币符号打印错误)
几点注意:
很明显,它在我的机器上不起作用,否则,我就不麻烦问了。另外,您可以从我的编辑中看到(即使我最初提到my env设置为UTF8),您的编辑不会显示其余的区域设置或
test.bah
.1的编码。所有的区域设置都是en_US.UTF8,您引用了“LANG”,它显示为2。文件编码并不重要问题在ASCI和UTF-8上都是相同的更正:当文件编码为UTF8时,它显示“5–5”,而只是新的一行。当然,编码很重要。ASCII甚至没有欧元符号。如果UTF-8显示不正确,可能是您的putty设置有问题。欧元符号与gnu grep 2.6.3上的[[:print:]类匹配。您正在运行哪个版本?2.10,您可以在我的答案上看到所有详细信息
Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-virtual i686)
grep --version grep (GNU grep) 2.10
bash --version GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)
$ cat test.bah
I can has 5€ or 5£?
$ cat test.bah | grep -P -o '[[:print:]]*'
I can has 5
or 5
?
$ cat test.bah | grep -P -o '[^[:print:]]*'
€
£
$ cat test.bah | grep -P -o '([[:print:]]|[^[:print:]])*'
I can has 5€ or 5£?