在bash脚本中,我必须匹配以字符串lo
开头3次的字符串;所以lololoba
很好,loloba
很糟糕,lololololoba
很好,balololo
很糟糕。
我尝试使用这种模式:"^$str1/{$n,}"
但它不起作用,我该怎么做?
编辑:
根据OP的评论,lololololoba
现在很糟糕。
答案 0 :(得分:6)
这应该有效:
Person
编辑(根据OP评论):
如果你想准确匹配3次(即pat="^(lo){3}"
s="lolololoba"
[[ $s =~ $pat ]] && echo good || echo bad
,这应该是无与伦比的):
将lolololoba
更改为:
pat="^(lo){3}"
答案 1 :(得分:3)
答案 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,那么您必须在第一行中转义!
(这就是我的正则表达式所做的那样)