2011-05-29 15:05:02 +0000 2011-05-29 15:05:02 +0000
221
221

Skasować wszystkie linie w Notatniku++ z wyjątkiem linii zawierających słowo, którego potrzebuję?

Mam plik tekstowy i chcę, aby linie zaczynały się od <Path>, i usunąć wszystkie pozostałe linie.

Jak mogę to zrobić?

Odpowiedzi (10)

315
315
315
2011-06-03 20:23:06 +0000

Jest łatwy sposób, aby to osiągnąć. Musisz wykonać 2 kroki.

  1. Przejdź do menu wyszukiwania… `Wybierz zakładkę "Zaznacz". Aktywuj wyrażenia regularne. Szukaj^(^` jest dla początku linii). Nie zapomnij zaznaczyć “Zakładka linie” i wciśnij “Zaznacz wszystko”

    1. Przejdź do menu “Wyszukiwanie - Zakładka - Usuń nieoznaczone linie”.
67
67
67
2013-02-27 16:03:51 +0000

W rzeczywistości można to zrobić w dwóch etapach, począwszy od 6.3. Myślę, że można to zrobić wcześniej, ponieważ miałem 5.9, kiedy pierwszy raz spróbowałem.

Użycie postu stema jako podstawy tej odpowiedzi. Teraz jest jeden krok mniej. Zaznacz linie i usuń nieoznaczone. Zrobione. Szczegółowa instrukcja.

  1. Wyszukaj w menu “Znajdź”. W oknie dialogowym “Znajdź” kliknij zakładkę “Zaznacz”. Aktywuj wyrażenia regularne. Szukaj ^<Path> (^ jest dla początku linii). Nie zapomnij zaznaczyć “Linie zakładek” i wciśnij “Zaznacz wszystko”

  2. Menu wyszukiwania -> Zakładka -> Usuń nieoznaczone linie.

30
30
30
2013-07-08 16:51:09 +0000

Clean regex only solution

Two step variant

  1. regex replace

  2. replace

Single step variant

Use ^(?!<Path>).*\r\n to replace matches with empty string. Wersja uogólniona to ^(?!.*?test).*\r\n. Nie spowoduje to usunięcia pustego wiersza na końcu pliku. Wszystkie pozostałe linie są usuwane, łącznie z wieloma kolejnymi pustymi liniami._

Wyjaśnienie:

  1. (?!) jest spojrzeniem negatywnym. ^.*test.*$ zaznacza całą linię, która zawiera żądany tekst.

  2. [\r\n]{2,} dopasowuje dowolny \r\n, który występuje częściej niż raz jest to Windows Nowa linia. jeśli masz Linuksa lub inny system operacyjny, być może będziesz musiał się tym zająć.

5
5
5
2015-12-17 11:43:30 +0000

Wydaje mi się, że najłatwiej jest po prostu użyć funkcji “Znajdź wszystko w aktualnym dokumencie”, a następnie albo skopiować wyniki do nowego pliku, albo wybrać wszystkie i zastąpić je w aktualnym.

W ten sposób znajdziesz wszystkie wiersze zawierające Twój tekst i wypiszę je na dole. Wystarczy kliknąć prawym przyciskiem myszy na wynik wyszukiwania i skopiować / wkleić.

4
4
4
2013-06-21 16:36:49 +0000

Przejdź do menu Szukaj -> Znajdź… -> Aktywuj wyrażenia regularne. Wyszukaj “^Path” (^ to początek linii).

Kliknij na przycisk “Znajdź wszystko w bieżącym dokumencie”.

Pojawi się okno “Znajdź wynik” z wszystkimi liniami wzorca. Wybierz kopiuj/wklej je do nowej zakładki w Notatniku++.

W tej nowej zakładce przejdź do: menu Search -> Zmień… -> Aktywuj wyrażenia regularne.

W polu “Znajdź co:” użyj wzorca: “Linia \d+: ”. Zostaw pole “Zastąp z:” puste.

Kliknij na przycisk “Zastąp wszystko”.

3
3
3
2011-05-30 01:02:36 +0000

Pod warunkiem, że rzeczywiście chcesz dopasować <Path>, a nie ścieżkę systemu plików, możesz spróbować tego z linii poleceń używając Perla:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

To działało z Strawberry Perl w Windows, więc dostosować odpowiednio, jeśli wyniki nie są tym, czego oczekujesz.

3
3
3
2011-05-29 18:07:54 +0000

Jest niezgrabny, ale skopiuj to wszystko do Excel , a następnie użyj =IF(LEFT(A1,6)="<Path>",A1,"") i skopiuj tę formułę aż do końca. Następnie skopiuj to z powrotem do Notatnika++. To nie jest idealne, ale jest dość łatwe (jeśli masz Excel). Ostrzeżenie: To nie będzie działać dobrze z liniami wciętymi (Excel przesunie kolumny, itp.).

2
2
2
2011-05-30 03:00:09 +0000

Z Notatnikiem++ nie ma łatwego sposobu na zrobienie tego, co chcesz. Musisz albo ściągnąć program na swój komputer albo skryptować coś w VB (zakładam, że jesteś na Windowsie).

Z sedem możesz robić co chcesz na jeden z dwóch sposobów. Narzędzie sed jest ulubionym narzędziem na *nix i można je znaleźć dla Windows od wielkich ludzi na GnuWin http://gnuwin32.sourceforge.net/packages/sed.htm ). Pobrałbyś ten program, a następnie uruchomiłbyś komendę z wiersza poleceń.

Usuń wszystkie linie nie zawierające : sed -i '/^<PATH>/!d' file

Wydrukuj wszystkie linie zawierające do nowego pliku: sed -n '/^<PATH>/p' file > newfile

Sugeruję wydrukowanie linii, które chcesz do nowego pliku. Powodem tego jest to, że prawdopodobnie nie dostaniesz po raz pierwszy deklaracji regex. Narzędzie sed używa podstawowej składni wyrażeń regularnych (zobacz odnośnik na http://www.regular-expressions.info/reference.html ). Jeśli jest to coś w rodzaju ścieżki *nix (/var/www), będziesz musiał uciec od znaku /, aby twój regex działał.

Przykład: sed -n '/^\/var\/www/p' file > newfile To wypisze wszystkie linie zaczynające się od ‘/var/www’. Gdybym złożył wniosek o ucieczkę od znaku /, wtedy komenda rzuciłaby błąd. Możesz uciec przed znakiem specjalnym (takim jak /) z odwrotnym ukośnikiem \ .

1
1
1
2018-05-01 14:37:57 +0000

Lepsze rozwiązanie z regexem zastąpić:

(?!^.*SOMETEXT.*$)^.+\r?\n

I zastąpić z niczym

0
0
0
2011-05-29 15:16:28 +0000

Użyj Search->Replace i wprowadź wyrażenie regularne jak ^[^].* i zamień wszystko na pusty łańcuch używając Regular expression. Następnym krokiem jest wyszukanie pustych linii szukaj±cych \n\n zastępuj±c je wielokrotnie \n używaj±c Extended do 0 occurrences were found. (użyj \r\n\r\n i \r\n w zależno¶ci od formatu pliku). Jeśli masz bardzo dużo pustych linii pod rząd, szybciej użyj \n\n\n\n\n\n\n lub nawet więcej \n:s w łańcuchu wyszukiwania.