是否有包含€的grep正则表达式类

时间:2012-12-13 17:34:51

标签: grep

是否有特定的正则表达式类,包括欧元符号? 根据{{​​3}} [:print:]类(AFAIK€是可打印的)和[:punct:]类不包含欧元符号,因为它们只包含区域设置(en_US.UTF-8)和ASCII标点字符(包括$)

$ echo "I can has 5€ ?"  | grep -o "[[:print:]*"
I can has 5

是否有另一种解决方案(因为我猜这个问题会与除了美元之外的所有货币字符都有关),这将允许我捕获每个可打印的字符?

修改 在使用putty设置后,我设法在打印文件时显示€,但grep-ing行为很奇怪。最初我甚至无法打印“€”bbut将putty编码更改为cp1252(而不是Unicode)后,我可以看到符号。虽然

仍然无法使用grepping
$ 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"
...

2 个答案:

答案 0 :(得分:1)

显然,在我的机器上:

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
?

(顺便说一句,新行是多次匹配的结果而不是错误印记货币符号)

$ cat test.bah | grep -P -o '[^[:print:]]*'
€
£
$ cat test.bah | grep -P -o '([[:print:]]|[^[:print:]])*'
I can has 5€  or 5£?

很少注意到:

  1. @melpomene在他的回答中表示他的控制台或grep版本更好地处理货币符号。我使用的是usntu 12.04的aws股票版本
  2. 在我的qustion中,我提到我需要更改油灰设置以防万一 有人需要设置 - 在Window-> Translation->下;将接收到的数据设置为Win1252(西方)计数器直观,看起来似乎是如此,将encoeding设置为UTF-8使€和£显示为#或▒de 等待绘图字符选择选项)

答案 1 :(得分:0)

$ echo "I can has 5€ ?" | grep -o '[[:print:]]*'
I can has 5€ ?
$ echo $LANG
en_US.utf8