Jakiego polecenia sed / awk mogę użyć? Po prostu sort -u
usunie wszystkie wystąpienia
Wejście:
abc
abc
def
abc
abc
def
Oczekiwany wynik:
abc
def
abc
def
źródło
Jakiego polecenia sed / awk mogę użyć? Po prostu sort -u
usunie wszystkie wystąpienia
Wejście:
abc
abc
def
abc
abc
def
Oczekiwany wynik:
abc
def
abc
def
Do tego uniq
służy standardowe polecenie.
uniq your-file
Zauważ, że niektóre uniq
implementacje, takie jak GNU uniq
, dadzą ci pierwszą z sekwencji wierszy, które sortują to samo (gdzie strcoll()
zwraca 0), w przeciwieństwie do identycznych bajtów po bajcie (gdzie memcmp()
lub strcmp()
zwraca 0). Aby wymusić porównanie bajt-bajt bez względu na uniq
implementację, możesz wymusić ustawienie regionalne za C
pomocą:
LC_ALL=C uniq your-file
Vim potrafi to ładnie osiągnąć:
:g/\v^(.*\n)\1/d
Lub jeśli wolisz używać vima jako narzędzia wiersza poleceń, możesz to zrobić jako
vim file -c "g/\v^(.*\n)\1/d" -c "wq"
W ten sposób nie będziesz musiał walczyć z wychodzącym vimem później;)
Wyjaśnienie:
:g/
Na wszystkich liniach, które pasują do tego wyrażenia regularnego ...
\v^(.*\n)\1
Każda linia, po której następuje sama ...
/d
uruchom polecenie d elete (usuń bieżący wiersz). Należy -c "wq"
zapisać zmiany i wyjść.