尝试在命令行中使用带有grep的正则表达式来为我提供以空格或小写int开头的行,后跟空格。从那里,他们必须以半结肠或o结束。
我试过
grep ^[\s\|int]\s+[\;\o]$ fileName
但我没有得到我想要的东西。我也试过
grep ^\s*int\s+([a-z][a-zA-Z]*,\s*)*[a-z]A-Z]*\s*;
但没有。
答案 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使用扩展正则表达式。因此减少了对反斜杠的需求。
让我们一次检查一个正则表达式:
^
在一行开头匹配。
(\s|int\s)
这符合 空格或 int
后跟空格。
.*
匹配任何字符的零个或多个。
[;o]
匹配方括号中的任何字符,这意味着它与;
或o
匹配。
$
在一行末尾匹配。