- 论坛徽章:
- 0
|
回复 33# j3kljs02398j
补充两个比较少见的问题:
我的环境是- [iscs@linux-sp1]:/users/iscs>$ uname -a
- Linux linux-sp1 2.6.32.12-0.7-default #1 SMP 2010-05-20 11:14:20 +0200 x86_64 x86_64 x86_64 GNU/Linux
- [iscs@linux-sp1]:/users/iscs>$ grep --version
- GNU grep 2.5.2
- Copyright (C) 1988, 1992-2002, 2004, 2005 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制代码 它的man手册里有句这个:
在方括号表达式之中,一个 范围表达式 (range) 由两个字符组成,中间用一个连字符 (hyphen) 分隔。它匹配在这两个字符之间的任何一个字符,使用本地化的序列
顺序和字符集。(that sorts between the two characters,inclusive, using the locale's collating sequence and character set.) 例如,在默认的 C locale
中 , [a-d] 与 [abcd] 等价。典型的,许多 locale 将字符以字典顺序排序,在这些 locale 中, [a-d] 不与 [abcd] 等价;例如它可能与 [aBbCcDd] 等价。要获
得传统的对方括号表达式的解释,可以设定环境变量 LC_ALL 值为 C 来使用 locale C
举个例子:
- [iscs@linux-sp1]:/users/iscs>$ echo $LC_ALL
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- > abc"|grep '[a-c]'
- ABC
- abc
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- abc"|grep -E '[a-c]'
- ABC
- abc
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- abc"|grep -P '[a-c]'
- abc
- [iscs@linux-sp1]:/users/iscs>$ export LC_ALL="C"
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- abc"|grep '[a-c]'
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- abc"|grep -P '[a-c]'
- abc
- [iscs@linux-sp1]:/users/iscs>$ echo "ABC
- abc"|grep -E '[a-c]'
- abc
- abc
复制代码 就是说[]的效果会受一个环境变量的影响,连-E选项也不能例外 -P选项可以正确匹配.这个可能不具有一定的移植性,我在Solaris上试过没有这个问题,可能grep版本不对.但在linux上以前在版上有人遇到过,特别说明一下.
还有一个是--的问题,比如- [iscs@linux-sp1]:/users/iscs>$ echo "--shit"|grep --shit
- grep: unrecognized option '--shit'
- Usage: grep [OPTION]... PATTERN [FILE]...
- Try `grep --help' for more information.
- [iscs@linux-sp1]:/users/iscs>$ echo "--shit"|grep -- --shit
- --shit
复制代码 |
|