我需要删除文件中所有少于4个唯一字符的字符串
输入:
hello
cabby
pabba
lokka
lappa
coool
apple
预期输出:
hello
cabby
lokka
apple
我试图想出一个正则表达式来做到这一点,但我什至无法想象它怎么可能。我确实找到了一个看起来很有前途的sed
命令,它删除了所有重复的字符。但是,我不确定如何编程sed
以测试程序是否返回4个字符,然后如果匹配,则匹配原始字符串。sed ':1;s/\(\(.\).*\)\2/\1/g;t'
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'
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中的单独字段。