0

是否有特定的正则表达式类,包括欧元符号?根据grep 手册, [:print:] 类(AFAIK € 是可打印的)和 [:punct:] 类不包含欧元符号,因为它们仅包含语言环境(en_US.UTF-8)和 ASCII 标点字符(包括$)

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

是否有另一种解决方案(因为我猜这个问题将与美元以外的每个货币字符一起出现)可以让我捕捉每个可打印的字符?

编辑 在玩腻子设置后,我在打印文件时设法显示了€,但是 grep-ing 它的行为很奇怪。最初我什至无法打印“€”,但是在将腻子编码更改为 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"
...
4

2 回答 2

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 版本可以更好地处理货币符号。我正在使用 ubuntu 12.04 的 aws 库存版本
  2. 在我的问题中,我提到我需要更改腻子设置以防有人需要设置 - 在 Window->Translation-> 下将接收到的数据设置为 Win1252 (Western) 看起来很反直觉,将编码设置为 UTF-8使 € 和 £ 显示为 # 或 ▒ 取决于绘图字符选择的选项)
于 2012-12-13T18:20:52.380 回答
0
$ echo "I can has 5€ ?" | grep -o '[[:print:]]*'
I can has 5€ ?
$ echo $LANG
en_US.utf8
于 2012-12-13T17:39:03.360 回答