Shell
從列表中返回字元的第一個實例
假設我將此命令的輸出保存到文件中。
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
- 格倫,是的,四個字元串/鍵/令牌的第一個實例。我還需要匹配是可變的,以便我可以根據需要操縱字元匹配。
- 萬用字元,這很好用,謝謝。
- thrig,這非常有效,謝謝。
假設glenn jackman 對您問題的解釋是正確的,這裡有一個使用
awk
and的解決方案substr()
:awk '{key = substr($0,1,4)}; !(key in printed); {printed[key]}' file
這會將“key”設置為一行的前四個字元,然後列印該行,除非它以前見過該鍵,然後跟踪該鍵已被列印的事實。
使用雜湊?
% (echo foo; echo bar; echo foobar) \ | perl -ne '/(.{3})/; print unless $seen{$1}++' foo bar %