有什么方法可以留下或删除包含在任何位置重复N次以上字母的行? 我需要删除X或Y在任何位置重复4次以上的行。例如:
XAABCCC
XABXXBA
BCXXXCX
AXXXXCA
输出应为:
XAABCCC
XABXXBA
使用和阅读教程在互联网上搜索SED或AWK并没有帮助我。提前谢谢。
答案 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
挽救了打印线的不成功替换。