我正在寻找仅在字符串中连续出现2个连续字符时才匹配的正则表达式。
例如:
当前具有此正则表达式:([0-9])\ 1 {1,},但它也匹配1122345,这不是我所需要的
答案 0 :(得分:1)
如果您的awk(mawk
)或GNU awk(gawk
)最少,则可以使用此awk:
awk -F "" '
{
d=0
for(i=1;i<NF;i++){
if ($i==$(i+1)) d++
}
if (d==1) print
}' file
将字段设置为空字符串(""
),您可以按字符阅读每行!如果字符i
等于字符i+1
,则递增d
。如果为d==1
,则显示字符串。
根据您的样本:
$ cat file
1123456
1122345
1121125
1234567
1112345
它输出:
1123456
重要说明:
GNU awk手册说,使用空字符串作为字段分隔符是一个“黑暗的角落”,这意味着它不是标准的,某些实现可能以不同的方式处理它。如果您想确定它可以与任何awk一起使用,请
awk '
{
d=0
n=split($0,ch,"")
for(i=1;i<n;i++){
if (ch[i]==ch[i+1]) d++
}
if (d==1) print
}' file
它通过了gawk --posix
测试,并得出了相同的结果。