Regex: usuń wiersze zawierające „pomoc” itp


371

Mam długi dokument poleceń. Używając Notepad ++ lub regex, chcę usunąć wszystkie wiersze zawierające „pomoc”, w tym keyboard_help itp.

Jak można to zrobić?

Odpowiedzi:


945

Jest to również możliwe w Notepad ++:

  • Przejdź do menu wyszukiwania Ctrl+ Fi otwórz kartę Oznacz .
  • Sprawdź wiersz Zakładki (jeśli nie ma aktualizacji zakładki Oznacz do bieżącej wersji).

  • Wpisz wyszukiwane hasło i kliknij Oznacz wszystko

    • Wszystkie wiersze zawierające wyszukiwane hasło są oznaczone zakładkami.
  • Teraz przejdź do menu SzukajZakładkaUsuń zaznaczone linie

  • Gotowy.


36
Tak! Ma również „Usuń nieoznakowane linie”, które są jak grep, dokładnie to, czego potrzebowałem!
Chloe

6
Dzięki, to fajna sztuczka. Wolę to zrobić kilkoma prostymi kliknięciami niż odpalić konsolę Unix (ignorując to, że jestem głównie w systemie Windows), przejść cdna ścieżkę i wpisać złożone polecenie (martwiąc się o składnię i trwałe zepsucie, a następnie uświadomienie sobie nie ma kopii zapasowej). [ Nie zrozum mnie źle, cały czas używam poleceń konsoli do innych rzeczy, ale dla czegoś takiego to tylko przesada.]
ADTC

2
Właśnie zaoszczędziłem dużo czasu :-)
Brlja

3
sprawdzanie BOOKMARK LINEjest tutaj ważne, inaczej nie zadziała!
HaSeeB MiR

1
@AndrewSchultz, przepraszam, ale nie.
stema

187

Innym sposobem na zrobienie tego w Notepad ++ jest skorzystanie z okna dialogowego Znajdź / Zamień oraz z regex:

  • Ctrl+, haby wyświetlić okno dialogowe Znajdź zamień.

  • W polu Find what:tekstowym umieść wyrażenie regularne: .*help.*\r?\n(gdzie \rjest opcjonalne, jeśli plik nie ma zakończeń linii Windows).

  • Pozostaw Replace with:pole tekstowe puste.

  • Upewnij się, że przycisk opcji Wyrażenie regularne w obszarze Tryb wyszukiwania jest zaznaczony. Następnie kliknij Replace Alli voila! Wszystkie wiersze zawierające wyszukiwane hasło helpzostały usunięte.

Poradnik Zamień wiersz w N ++


17
lepsza odpowiedź niż użycie zakładki mark, ponieważ można to zrobić dla „Find in Files”
Alex

2
Pamiętaj, aby uciec od znaków specjalnych, takich jak nawiasy, odwrotnym ukośnikiem.
Noumenon

4
odznacz
opcję

1
Lepsza odpowiedź dzięki wyższej wydajności. Przy plikach o wielkości> 1 miliona linii metoda zakładek jest maksymalnie rozciągnięta, również na nowoczesnych maszynach.
Roland Ettinger,

17

Proste zadanie dzięki grep:

grep -v help filename

Dołącz, > newFileNameaby przekierować dane wyjściowe do nowego pliku.


Aktualizacja

Aby to wyjaśnić, normalnym zachowaniem będzie drukowanie linii na ekranie. Aby użyć potoku do pliku, >można go użyć. Zatem w tym poleceniu:

grep -v help filename > newFileName
  1. grepgrepoczywiście wywołuje program
  2. -vto flaga odwracająca dane wyjściowe. Defaulf grepdrukuje linie pasujące do podanego wzoru. Za pomocą tej flagi wydrukuje linie, które nie pasują do wzoru.
  3. help to wzór do dopasowania
  4. filename to nazwa pliku wejściowego
  5. > przekierowuje dane wyjściowe do następującego elementu
  6. newFileName nowy plik, w którym dane wyjściowe zostaną zapisane.

Jak zauważyłeś, nie będziesz usuwać rzeczy z pliku. grepprzeczyta go, a inny plik zostanie zapisany, odpowiednio zmodyfikowany.


@Kevin Duke: Niestety! To prawdopodobnie oznacza, że ​​nie masz grepzainstalowanego. W każdym razie polecam instalację GNU grep, z pewnością będzie działał w systemie Windows i jest to naprawdę przydatne narzędzie.
sidyll

@sidyll wiedział, co to jest grep i zrobił sporo wyników, mogło być tak, ponieważ nie określiłem pliku wyjściowego
cytryna

2
@Kevin Duke: jak powiedziałem wcześniej w odpowiedzi, dane wyjściowe można przekierować. Standardowe zachowanie jest drukowane na ekranie. Aby przekierować, używasz potoku ( >w tym przypadku), podając ostateczne poleceniegrep -v help filename > outputFileName
sidyll

Dzięki, na pewno spróbuję tego!
cytryna

grep> sed dowolnego dnia tygodnia dla ZNAJDŹ sekwencje znaków
kwikness

13

Możesz to zrobić za pomocą sed: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: W wierszu poleceń na Linux / Mac / Whthing. Jeśli korzystasz z systemu Windows, musisz zainstalować coś takiego jak CygWin i użyć tego.
Tikhon Jelvis

Dzięki @TikhonJelvis! I ostatnie pytanie: czy możemy zrobić sed 'help /', aby usunąć wszystkie linie zaczynające się (nie zawierające) z pomocą?
Jeff

3
@CengizFrostclaw: Myślę, że sed '/^help/ d'powinien działać. ^Stanowi początek linii.
Tikhon Jelvis

@jeff PowerShell ma sedigrep
Ooker

cygwin może nie działać w systemie Windows z plikami utf-16. Narzędzia Cygwin domyślnie używają UFT-8. Bardzo niewiele z nich obsługuje UTF-16. Użyj babun babun.github.io . Działa jak opakowanie wokół cygwina, ale zapewnia wiele rzeczy po wyjęciu z pudełka.
Sahil Singh


6

Jeśli korzystasz z systemu Windows , spróbuj findstr. Narzędzia innych firm nie są potrzebne:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Obsługuje także wyrażenia regularne! Po prostu przeczytaj pomoc narzędzia findstr /?.

PS Jeśli chcesz pracować z dużymi, dużymi plikami (np. 400 MB plików dziennika), edytor tekstu nie jest bardzo wydajny pod względem pamięci, więc, jak już ktoś zauważył, narzędzia wiersza poleceń są najlepszym rozwiązaniem. Ale w systemie Windows nie ma grep, więc ...

Właśnie uruchomiłem to na pliku dziennika 1 GB i zajęło mi to dosłownie 3 sekundy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.