返回列表中字符的第一个实例

返回列表中字符的第一个实例

假设我已将此命令的输出保存到文件中。

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
% 

相关内容