我正在尝试使用带有正则表达式模式的egrep来匹配空格。
我之前使用过PerEx和C#的RegEx,它们都支持模式\s
来搜索空格。 egrep(或至少我正在使用的版本)似乎不支持这种模式。
在网上的一些文章中,我遇到了一个简写[[:space:]],但这似乎不起作用。任何帮助表示赞赏。
使用:SunOS 5.10
答案 0 :(得分:22)
我在SunOS 5.10上看到了同样的问题。 /usr/bin/egrep
不支持扩展正则表达式。
尝试使用/usr/xpg4/bin/egrep
:
$ echo 'this line has whitespace
thislinedoesnthave' | /usr/xpg4/bin/egrep '[[:space:]]'
this line has whitespace
另一个选择可能就是使用perl:
$ echo 'this line has whitespace
thislinedoesnthave' | perl -ne 'chomp;print "$_\n" if /[[:space:]]/'
this line has whitespace
答案 1 :(得分:11)
如果你正在使用'降级'版本的grep(我引用这个术语是因为我工作的大多数UNIX仍然使用原始RE,而不是那些带有“\s
”或“{{1 “:-),你可以恢复到最低形式的RE。
例如,如果将[[:space:]]
定义为空格和制表符,只需使用:
:space:
egrep '[ ^I]' file
是一个实际的制表符,而不是两个字符^I
和^
。
这是假设I
定义为标签和空格,否则调整:space:
字符内的选项。
使用降级RE的优点是它们应该适用于所有平台(至少对于ASCII; Unicode或非英语语言可能有不同的规则,但我很少发现需要)。
答案 2 :(得分:0)
也许你应该用引号来保护模式(如果bash,或者你正在使用的shell的任何等价物)。
[和]可能对shell有特殊意义。
答案 3 :(得分:-3)
$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file
this line has whitespace
在debian下工作。
对于Solaris,是不是有“eselect”之类的(请参阅gentoo)或替代文件来设置默认的egrep版本?
你有没有尝试过grep -E,因为如果路径上的egrep不是好的,也许是grep。