grep与reg ex

时间:2016-09-17 03:45:30

标签: regex bash shell grep

尝试在命令行中使用带有grep的正则表达式来为我提供以空格或小写int开头的行,后跟空格。从那里,他们必须以半结肠或o结束。

我试过

grep ^[\s\|int]\s+[\;\o]$ fileName

但我没有得到我想要的东西。我也试过

grep ^\s*int\s+([a-z][a-zA-Z]*,\s*)*[a-z]A-Z]*\s*;

但没有。

1 个答案:

答案 0 :(得分:3)

让我们考虑一下这个测试文件:

$ cat file
 keep marco
polo
int keep;
int x

如果我理解你的规则,应该保留上面的两行,而丢弃其他两行。

让我们试试grep

$ grep -E '^(\s|int\s).*[;o]$' file
 keep marco
int keep;

以上使用\s来表示空间。 GNU grep支持\s。对于其他greps,我们可以使用POSIX字符类。稍微重新组织代码以减少输入:

grep -E '^(|int)[[:blank:]].*[;o]$' file

如何运作

在Unix shell中,命令中的单引号是关键的:它们阻止shell解释或扩展单引号内的任何字符。

-E告诉grep使用扩展正则表达式。因此减少了对反斜杠的需求。

让我们一次检查一个正则表达式:

  1. ^在一行开头匹配。

  2. (\s|int\s)这符合 空格 int后跟空格。

  3. .*匹配任何字符的零个或多个。

  4. [;o]匹配方括号中的任何字符,这意味着它与;o匹配。

  5. $在一行末尾匹配。