如何删除在任何位置重复N次以上的行号?

时间:2014-12-09 15:58:08

标签: text awk sed line

有什么方法可以留下或删除包含在任何位置重复N次以上字母的行? 我需要删除X或Y在任何位置重复4次以上的行。例如:

XAABCCC
XABXXBA
BCXXXCX
AXXXXCA

输出应为:

XAABCCC
XABXXBA

使用和阅读教程在互联网上搜索SED或AWK并没有帮助我。提前谢谢。

6 个答案:

答案 0 :(得分:1)

使用grep:

~$ grep -Ev "(X.*){4,}" myfile
XAABCCC
XABXXBA

您可能会在4次之后搜索X-v否定了匹配。

答案 1 :(得分:1)

以下是sed的替代方案:

sed -n 'h;s/[^X]//g;/XXXX/{x;p}' file

说明:

h            - Put current line into hold buffer
s/[^X]//g    - Replace all non X chars ...
/XXXX/{x;p}  - ... and check if the line holds 4 or more X
               If yes, then get back the original line from 
               hold buffer -> x and print the line -> p

答案 2 :(得分:1)

这可能是你想要的:

$ cat file
XAABCCC
XABXXBA
BCXXXCX
AXXXXCA
BCXYXCY
BCYYYCY
XCYXYCY

$ awk 'gsub(/[XY]/,"&")>=4' file
BCXXXCX
AXXXXCA
BCXYXCY
BCYYYCY
XCYXYCY

如果没有,请编辑您的问题以澄清。

答案 3 :(得分:0)

这样的东西
$ sed '/\(X.*\)\{4\}/d' input
XAABCCC
XABXXBA

$ awk '/(X.*){4}/' input
BCXXXCX
AXXXXCA

答案 4 :(得分:0)

对于任何角色而不仅仅是X:

grep -Ev "(.)(.*\1){3,}" input

仅限大写字母:

grep -Ev "([A-Z])(.*\1){3,}" input

答案 5 :(得分:0)

这可能适合你(GNU sed):

sed 's/X/&/4;T;d' file

如果您可以自行替换4 X,则删除该行。

N.B。与t命令相反,它命令成功的替换分支。这里T挽救了打印线的不成功替换。