egrep搜索空格

时间:2009-01-15 23:40:39

标签: regex unix grep

我正在尝试使用带有正则表达式模式的egrep来匹配空格。

我之前使用过PerEx和C#的RegEx,它们都支持模式\s来搜索空格。 egrep(或至少我正在使用的版本)似乎不支持这种模式。

在网上的一些文章中,我遇到了一个简写[[:space:]],但这似乎不起作用。任何帮助表示赞赏。

使用:SunOS 5.10

4 个答案:

答案 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。