打印仅包含所有连续重复字符的行

打印仅包含所有连续重复字符的行

我有一个文本文件,我只想打印所有字符连续重复至少两次或更多次的行。例如输入:

11
AAA
555227777
BBhh@@222
baabbb
1112
212211
baa
22333445
322113

 输出应该是:

11
AAA 
555227777
BBhh@@222

 输出仅包含这四行,因为它们仅包含按顺序连续重复的字符。

我已经尝试过这段代码

grep '\(^\| \)\([   ])\2\1\($\| \)' INFILE

但它并不完全有效。

答案1

 sed -En 'h;:a;s/^(.)\1+//;ta;/^$/{x;p}' file

有评论

sed -E -n '
    h            # store a copy of the line
    :a           # set label "a"
    s/^(.)\1+//  # from the start of the line, remove sequences of 2 or more repeated chars
    ta           # *if the pattern matched* jump to "a"
    /^$/ {       # if empty string:
        x        #   retrieve the original line
        p        #   and print it
    }
' file

答案2

一种方法是使用 Gnu sed:

sed -Ee '/^((.)\2+)+$/!d'  input.txt

相关内容