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ć?
Mam plik tekstowy i chcę, aby linie zaczynały się od <Path>
, i usunąć wszystkie pozostałe linie.
Jak mogę to zrobić?
Jest łatwy sposób, aby to osiągnąć. Musisz wykonać 2 kroki.
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”
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.
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”
Menu wyszukiwania -> Zakładka -> Usuń nieoznaczone linie.
regex replace
replace
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._
(?!)
jest spojrzeniem negatywnym. ^.*test.*$
zaznacza całą linię, która zawiera żądany tekst.
[\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ąć.
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ć.
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”.
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.
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.).
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 \ .
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.