如何匹配以字符串开头的字符串(带正则表达式)

时间:2015-07-07 14:31:29

标签: regex linux bash

在bash脚本中,我必须匹配以字符串lo开头3次的字符串;所以lololoba很好,loloba很糟糕,lololololoba很好,balololo很糟糕。

我尝试使用这种模式:"^$str1/{$n,}"但它不起作用,我该怎么做?

编辑:

根据OP的评论,lololololoba现在很糟糕。

4 个答案:

答案 0 :(得分:6)

这应该有效:

Person

编辑(根据OP评论):

如果你想准确匹配3次(即pat="^(lo){3}" s="lolololoba" [[ $s =~ $pat ]] && echo good || echo bad ,这应该是无与伦比的):

lolololoba更改为:

pat="^(lo){3}"

答案 1 :(得分:3)

您可以使用以下正则表达式:

^(lo){3}.*$

而不是lo,您可以放置​​变量。

请参阅演示https://regex101.com/r/sI8zQ6/1

答案 2 :(得分:0)

您可以使用此awk在开头匹配完全 3次出现的lo

# input file
cat file
lololoba
balololo
loloba
lololololoba
lololo

# awk command to print only valid lines
awk -F '^(lo){3}' 'NF == 2 && !($2 ~ /^lo/)' file
lololoba
lololo

答案 3 :(得分:0)

根据你的评论:

... more than 3 is bad so "lolololoba" is not good! 

你会发现@Jahid的回答并不适合(因为他给你的#34;良好"到那个测试字符串。

使用正确的正则表达式回答:

pat="^(lo){3}(?\!lo)"
s="lolololoba"
[[ $s =~ $pat ]] && echo good || echo bad

这证明开头有三个,而不是紧跟三个之后的另一个。

请注意,如果您正在使用bash,那么您必须在第一行中转义!(这就是我的正则表达式所做的那样)