22

我正在尝试将 egrep 与正则表达式模式一起使用来匹配空格。

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

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

使用:SunOS 5.10

4

5 回答 5

25

我在 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
于 2009-01-16T00:30:51.583 回答
14

如果您使用 grep 的“降级”版本(我引用该术语是因为我工作的大多数 UNIX 仍然使用原始 RE,而不是那些带有“ \s”或“ [[:space:]]”的花哨的 :-),您可以恢复到RE的最低形式。

例如,如果:space:定义为空格和制表符,只需使用:

egrep '[ ^I]' file

^I是一个实际的制表符,而不是两个字符^I

:space: 这是假设定义为制表符和空格,否则调整[]字符内的选择。

使用降级 RE 的优点是它们应该适用于所有平台(至少对于 ASCII;Unicode 或非英语语言可能有不同的规则,但我很少发现需要)。

于 2009-01-16T00:52:28.527 回答
3

如果您使用的是 bash,那么将制表符放在一行中的语法是

$'foo\tbar'

我最近正在使用 sed 对制表符分隔的文件进行一些修复。文件的一部分是:

sed -E -e $'s/\t--QUOTE--/\t"/g'

该参数由 bash 解析,并且 sed 看到一个带有文字标签的正则表达式。

于 2012-09-10T03:36:07.470 回答
0

也许你应该用引号保护模式(如果是 bash,或者你正在使用的 shell 的任何等效项)。

[ 和 ] 对 shell 可能有特殊含义。

于 2009-01-15T23:51:56.247 回答
-3
$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file 
this line has whitespace

在debian下工作。

对于 Solaris,没有像(参见 gentoo)这样的“eselect”或替代文件来设置默认的 egrep 版本吗?

您是否尝试过 grep -E,因为如果您路径上的 egrep 不是好的,那么 grep 可能是。

于 2009-01-15T23:47:43.917 回答