Powiedzmy, że masz następujący tekst:
abc
123
abc
456
789
abc
abc
Chcę usunąć wszystkie wiersze „abc” i po prostu zachować jedną. Nie mam nic przeciwko sortowaniu. Wynik powinien wyglądać następująco:
abc
123
456
789
źródło
Powiedzmy, że masz następujący tekst:
abc
123
abc
456
789
abc
abc
Chcę usunąć wszystkie wiersze „abc” i po prostu zachować jedną. Nie mam nic przeciwko sortowaniu. Wynik powinien wyglądać następująco:
abc
123
456
789
Sortuj wiersze alfabetycznie, jeśli jeszcze nie są, i wykonaj następujące kroki:
(na podstawie tego pokrewnego pytania: Jak znaleźć i usunąć zduplikowane wiersze z pliku za pomocą wyrażeń regularnych? )
Control+F
Przełącz „tryb zastępowania”
Przełącz „Użyj wyrażenia regularnego” (ikona z .*
symbolem)
W polu wyszukiwania wpisz^(.*)(\n\1)+$
W polu „ zamień na ” wpisz$1
W takim przypadku skorzystaj z rozwiązania innego niż VS Code (patrz tutaj ) lub - jeśli twój dokument nie jest bardzo duży i nie masz nic przeciwko spamowaniu przycisku Zamień wszystko - wykonaj poprzednie kroki, ale w krokach 4 i 5, wprowadź te:
(na podstawie opcji Usuń określone zduplikowane linie bez sortowania )
Uwaga: blokuje pliki ze zbyt dużą liczbą wierszy (1000+); może spowodować awarię VS Code; może w niektórych przypadkach wprowadzić puste wiersze.
szukaj :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?
zastąpić :$1
a następnie kliknij przycisk „Zamień wszystko” tyle razy, ile wystąpi duplikat .
Dowiesz się, że wystarczy, gdy liczba linii przestanie maleć po kliknięciu przycisku. Przejdź do ostatniego wiersza dokumentu, aby mieć na to oko.
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?
spowodował awarię mojego vscode ... Zrobiłem Find in one file 229 lines. :(^(.*)(\n\1)+$
. Po usunięciu zduplikowanych wierszy chcę spojrzeć na wszystkie wiersze ze zduplikowaną pierwszą kolumną w csv i zmienić wyrażenie regularne.\r?
z drugiej odpowiedzi nie jest naprawdę konieczna.Oto bardzo ciekawe rozszerzenie: Transformer
Cechy:
Aby usunąć zduplikowane linie:
Usuwa zduplikowane wiersze z dokumentu
Działa na zaznaczeniu lub bieżącym bloku, jeśli brak wyboru
Nie bawiłem się nim zbyt wiele poza poleceniem „Unikalne linie”, ale wydaje się całkiem niezłe (włączając w to próbę zarejestrowania makr!).
źródło
Aby dodać do odpowiedzi @ Marc.2377.
Jeśli kolejność jest ważna i nie obchodzi Cię, że po prostu zachowujesz ostatni ze zduplikowanych wierszy, po prostu wyszukaj następujące wyrażenie regularne, jeśli chcesz usunąć tylko zduplikowane niepuste wiersze
Jeśli chcesz również usunąć zduplikowane puste wiersze, użyj
*
zamiast+
i zamień na nic.
To zajmie linię i spróbuje znaleźć więcej (może 0) linii, po których nastąpi dokładnie ta sama wybrana linia. Usunie wybraną linię.
To jest tylko jednorazowe wyrażenie regularne. Nie musisz spamować przycisku zamień.
źródło
^(.+\n)(?=(?:.*\n)*?\1)
zamiast tego, ponieważ twoje wyrażenie regularne usunęło pusty wiersz tam, gdzie nie było oczekiwane. Mimo to głosowano za.xxx(?=…)
to lookahead-match. Dlatego zapewnia, że wszystko, co następuje po „xxx”, pasuje do „…”, ale nie przyspiesza wyszukiwania.(?:…)
jest tylko nawiasem, który nie liczy się w liczbie nawiasów..*\n
jest wzorcem dla (prawdopodobnie pustej) linii.*
oznacza, że może być kilka linii, a nawet żadna. Te?
po gwiazdką (*
) oznacza, że chcemy jak kilka linii, jak to możliwe. Jak\1
następuje w tym wyrażeniu, efekt jest taki, że patrzymy w przyszłość na wszystkie wiersze, które nie pasują,\1
dopóki nie znajdziemy pasującej linii\1
. Mam nadzieję, że to wyjaśnia.Właśnie miałem ten sam problem i znalazłem pakiet Visual Studio Code „Sort lines”. Aby uzyskać szczegółowe informacje (np. Linie sortowania ), zobacz rynek Visual Studio Code .
Ten pakiet ma opcję "Sorting lines (unique)", która zrobiła to za mnie. Uważaj na spacje na początku / końcu linii. Wpływają na to, czy linie są uważane za wyjątkowe, czy nie.
źródło
Zainstaluj rozszerzenie DupChecker , naciśnij F1i wpisz „Sprawdź duplikaty”.
Sprawdza duplikaty i zapyta, czy chcesz je usunąć.
źródło
Spróbuj znaleźć i zamienić na wyrażenie regularne .
Odnaleźć:
^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$
Zastąpić:
$1$2
W pierwszej grupie można wprowadzić pewną wariancję.
źródło
Właściwie nie w Visual Studio Code, ale jeśli działa, to działa.
To nie jest najlepsza odpowiedź, tak jak określiłeś Visual Studio Code, ale tak jak powiedziałem: jeśli działa, to działa :)
źródło