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