如何匹配字符类中的字符串“ like”的开头?

时间:2019-08-31 06:57:01

标签: regex bash awk

我在文件中输入一个字符串:

abc

def abc

我想匹配abc,使其可以出现在行的开头或空白之后。

我可以通过匹配多个模式来做到这一点,并用|分隔,例如:

/^abc|[[:blank:]]+abc/

但是有某种方法可以包含^,即字符串的开头类似于字符类。

字符类开头的

^表示取反,其他位置表示刚匹配 carrot('^')字符

此外,在我的原始情况下,字符串不仅是abc,而是与复杂的正则表达式匹配的字符串,因此我希望它尽可能整洁。我在awk脚本中匹配此正则表达式。尽管我仍然包含bash标签,因为system()函数仍可以在其中使用。在我看来,速度对我来说并不重要,但清晰度很重要。

3 个答案:

答案 0 :(得分:3)

使用捕获组:

(^|[[:blank:]]+)abc

它将匹配字符串的开头或一系列空格。如果您不需要比赛中+之前的所有空格,而是最后一个,则可以删除abc

答案 1 :(得分:2)

这应该做:

/(^|[[:blank:]])abc/

^开始或从[[:blank:]]开始,然后从abc

答案 2 :(得分:2)

开头或第^行不是不是字符,它是锚点,因此将其置于 character 类和{{ 1}},\A$\z

在您的情况下,您只需要测试字边界,就无需使用捕获组来减慢正则表达式的速度:

\b

以行首或非单词字符开头时,这与\<abc 相匹配。

Demo