我正在尝试制定一个与 grep 一起使用的正则表达式,以便我在每行的开头找到一个静态单词,后跟选项列表中的一个单词。
也就是说,我想要的匹配的形式为:StaticWord-opt1
、StaticWord-opt2
等。
这几乎作品:
grep -E "^StaticWord-[(opt1)?(opt2)?(opt3)?]+" fileToCheck
但我得到像这样的匹配:StaticWord-opt1(
、StaticWord-p
和StaticWord-1
由于仅当我们有 op1、opt2 或 opt3 的单个实例时才有效,因此我将表达式更改为:
grep -E "^StaticWord-[(opt1)?(opt2)?(opt3)?]{1}" fileToCheck
此时我只能得到像上面列出的列表中后两个这样的匹配项。
我的表达逻辑是“StaticWord-
锚定在开头,^
后跟以下任何[ ]
组( )
,每个组可能存在也可能不存在?
。最后,我们必须列表中只有一个{1}
。
答案1
如果乔丹没有将他们的评论转换为答案,我将对其进行扩展:
您想使用该|
字符来表示“opt1 或 opt2 或 opt3”。另外,如果你只想一在那些出现的人中,你确实不是想要使用+
,这意味着“一个或更多的“。这让你更接近:
grep -E "^StaticWord-(opt1|opt2|opt3)" fileToCheck
...但是您对该行的其余部分有疑问。如果您不需要其他任何内容,请使用:
grep -E "^StaticWord-(opt1|opt2|opt3)\$" fileToCheck
(我从外壳中转义了美元符号,以便将grep
其视为行尾标记)。