REGEX 和 GREP - 搜索字符串,包括可选和静态单词

REGEX 和 GREP - 搜索字符串,包括可选和静态单词

我正在尝试制定一个与 grep 一起使用的正则表达式,以便我在每行的开头找到一个静态单词,后跟选项列表中的一个单词。

也就是说,我想要的匹配的形式为:StaticWord-opt1StaticWord-opt2等。

几乎作品:

grep -E "^StaticWord-[(opt1)?(opt2)?(opt3)?]+" fileToCheck

但我得到像这样的匹配:StaticWord-opt1(StaticWord-pStaticWord-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其视为行尾标记)。

相关内容