正则表达式匹配使用一个表达式

时间:2014-08-19 16:19:15

标签: regex shell

有没有办法只使用一个正则表达式匹配前两行(不使用“或”匹配如:^cmd$|^cmd[[:space:]]+)?

cmd
cmd -option
cmdanother
cmdanother -option

单词cmdanother可以是以cmd开头的任何内容。

P.S。,谢谢大家的回答。它适用于上述情况。但是,如果有一行如下:

cmd-anything

它也被选中(似乎-是一个单词边界)。有没有解决这个问题?

3 个答案:

答案 0 :(得分:3)

如果输入与您给出的完全相同,\b可以正常工作。

^cmd\b

只是检查开头并忽略结尾应该有效。

但是,\b不仅匹配空格,:,.?...也会匹配。例如,cmd:foo, cmd.foo ...行将匹配。

如果他们不关心,只需选择\b,否则,您需要|(或)喜欢:

^cmd( .*|$) 

BRE:^cmd\( .*\|$\)

答案 1 :(得分:1)

你可以抛弃正则表达式并像这样使用awk:

awk '$1 == "cmd"' file
cmd
cmd -option

答案 2 :(得分:0)

使用字边界\b

^cmd\b.*$

DEMO