示例文件内容:
display this line
1111 aaaa
1111 aaaa
1111 aaaa
1111 aaaa
don't display this line
1111
1111
输出应该是display this line
答案1
在扩展正则表达式模式下使用 GNU sed:
$ sed -Ene '
$!N;$!N;$d
/^(.*)(\n\1){2}$/!D
n;p
' file
display this line
在图案空间中随时保持3条线。继续从模式空间中切掉顶行,直到我们看到模式空间中的所有 3 行都相同,或者我们遇到 eof ,为此我们关闭商店并退出。
答案2
看来你完全改变了问题。 GNU sed
sed -nre '
$!N
:loop
$bend
N
/(\n[^\n]*)\1$/bloop
:end;h;s/(.*)\n.*/\1/
s/^//;treset
:reset;s/\n/&/3;g;TD
P;s/.*\n/\n/;:D;D
' file
display this line
答案3
uniq -c
在这里很有帮助:
$ uniq -c file | tac | awk '$1 >= 3 {getline; print substr($0, 9)}' | tac
display this line
- 计算连续的相同行
- 反转输出
- 找到具有所需重复次数的行
- 获取下一行并在没有计数的情况下打印它
- 再次反转输出
一个问题:如果你的文件包含怎么办
a
bbb
bbb
bbb
ccc
ccc
ccc
d
你要输出吗a
和 bbb
?