假设我已将此命令的输出保存到文件中。
cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 50
我想仅比较文件中每行的前 n 个字符,并仅返回包含这些字符的第一个实例的第一行。
因此,例如,无需对文件进行排序,我想查看文件中每一行的前四个字符。我想找到每行上任意四个字符串的第一个实例,并仅打印包含第一个实例的行。
如果可以修改该命令以查看每行上的四个、五个或六个字符等,我将不胜感激。
非常感谢您的时间和帮助。我真的一直在努力弄清楚这一点。
MelBurslan,字符串的内容应该是无关紧要的,但上述命令的输出(现已更正)是我可以在英语键盘上输入的每个字符。下面是两条示例线。
k!>d#&)"EtXN`;*9TaD7BcL84z5[y{$Q?_Y%fCw6F0Vgn\|]ImqR.:1l<^}u'+Ms/hjS@e~2vxWO(3,bJiprP-=UAZGoHK 3'O$#Eg5&,`l>vn491M"cVZR\7J.H[XTw*:q}Kz8hf;W_P|i<6@CAytF^Dmkb]GBsU+{Y?xje%oIQ-~r!2Sap=/)N0du(L
Glenn,是的,四个字符串/密钥/令牌的第一个实例。我还需要匹配是可变的,以便我可以根据需要操纵字符匹配。
通配符,这非常有效,谢谢。
thrig,这非常有效,谢谢。
答案1
假设格伦·杰克曼对你的问题的解释awk
是正确的,这是使用and 的解决方案substr()
:
awk '{key = substr($0,1,4)}; !(key in printed); {printed[key]}' file
这将“key”设置为一行的前四个字符,然后打印该行,除非它之前见过该键,然后跟踪该键已被打印的事实。
答案2
使用哈希?
% (echo foo; echo bar; echo foobar) \
| perl -ne '/(.{3})/; print unless $seen{$1}++'
foo
bar
%