用bash匹配具有一定数量的唯一字符的字符串

问题描述 投票:2回答:2

我需要删除文件中所有少于4个唯一字符的字符串

输入:

hello
cabby
pabba
lokka
lappa
coool
apple

预期输出:

hello
cabby
lokka
apple

我试图想出一个正则表达式来做到这一点,但我什至无法想象它怎么可能。我确实找到了一个看起来很有前途的sed命令,它删除了所有重复的字符。但是,我不确定如何编程sed以测试程序是否返回4个字符,然后如果匹配,则匹配原始字符串。sed ':1;s/\(\(.\).*\)\2/\1/g;t'

regex string bash awk sed
2个回答
0
投票
您尝试过sed ':1;s/\(\(.\).*\)\2/\1/g;t',请用t替换t1。在执行命令之前,将当前行复制到“保留”空间中。命令后,请在原始行中至少保留至少4个字符的行。现在确保仅打印至少包含四个字符的行。

echo 'hello cabby pabba lokka lappa coool apple' | sed -nE 'h;:1;s/(.)(.*)\1/\1\2/g;t1;/.{4}/x;/.{4}/p'


1
投票
使用awk

awk 'BEGIN{FS=""} { unq=0; delete seen; for (i=1; i<=NF; i++) if (!seen[$i]++) unq++} unq > 3' file

hello cabby lokka apple

[FS=""将每个字符分成awk中的单独字段。
© www.soinside.com 2019 - 2024. All rights reserved.