Regex: Hapus baris yang mengandung "bantuan", dll

372

Saya punya dokumen panjang perintah. Menggunakan Notepad ++ atau regex, saya ingin menghapus semua baris yang berisi "bantuan" termasuk keyboard_help, dll.

Bagaimana ini bisa dilakukan?

lemon
sumber

Jawaban:

947

Ini juga dimungkinkan dengan Notepad ++:

  • Buka menu pencarian, Ctrl+ F, dan buka tab Tandai .
  • Periksa baris Bookmark (jika tidak ada pembaruan Tandai tab ke versi saat ini).

  • Masukkan istilah pencarian Anda dan klik Tandai Semua

    • Semua baris yang mengandung istilah pencarian ditandai.
  • Sekarang, masuk ke menu CariBookmarkHapus baris Bookmarked

  • Selesai

stema
sumber
36
Ya! Ini juga memiliki 'Hapus Garis Tidak Bertanda', yang seperti grep, persis apa yang saya butuhkan!
Chloe
6
Terima kasih, ini trik yang rapi. Saya lebih suka menyelesaikannya dengan beberapa klik sederhana daripada menjalankan konsol Unix (mengabaikan bahwa saya sebagian besar di Windows), cdke jalan, dan ketik perintah yang kompleks (khawatir tentang sintaks dan mengacaukan secara permanen kemudian menyadari tidak ada cadangan). [ Jangan salah paham, saya menggunakan perintah konsol sepanjang waktu untuk hal-hal lain, tetapi untuk sesuatu seperti ini, itu hanya kerja keras.]
ADTC
2
Baru saja menyelamatkan saya banyak waktu :-)
Brlja
3
memeriksa BOOKMARK LINEini penting di sini jika tidak, itu tidak akan berhasil !.
HaSeeB MiR
1
@AndrewSchultz, maaf, tapi tidak.
stema
187

Cara lain untuk melakukan ini di Notepad ++ adalah semua dalam dialog Temukan / Ganti dan dengan regex:

  • Ctrl+ huntuk memunculkan dialog temukan ganti.

  • Dalam Find what:kotak teks sertakan regex Anda: .*help.*\r?\n(di mana \ropsional jika file tidak memiliki ujung garis Windows).

  • Biarkan Replace with:kotak teks kosong.

  • Pastikan tombol radio Ekspresi reguler di area Mode Pencarian dipilih. Kemudian klik Replace Alldan voila! Semua baris yang mengandung istilah pencarian Anda helptelah dihapus.

Ganti Baris Cara di N ++

OozeMeister
sumber
17
jawaban yang lebih baik daripada menggunakan tab tanda, karena ini bisa dilakukan untuk "Temukan di File"
Alex
2
Pastikan untuk keluar dari karakter khusus seperti tanda kurung dengan garis miring terbalik.
Noumenon
4
pastikan untuk tidak mencentang ".
Match
1
Jawaban yang lebih baik karena kinerja yang lebih tinggi. Dengan file> 1 juta baris, metode bookmark diperluas hingga maksimum, juga pada mesin modern.
Roland Ettinger
18

Tugas mudah dengan grep:

grep -v help filename

Tambahkan > newFileNameuntuk mengarahkan output ke file baru.


Memperbarui

Untuk memperjelasnya, perilaku normal akan mencetak garis di layar. Untuk menyalurkannya ke file, >dapat digunakan. Jadi, dalam perintah ini:

grep -v help filename > newFileName
  1. grepmemanggil grepprogram, jelas
  2. -vadalah bendera untuk membalikkan output. Dengan defaulf, grepmencetak garis yang cocok dengan pola yang diberikan. Dengan bendera ini, itu akan mencetak garis yang tidak cocok dengan pola.
  3. help adalah pola yang cocok
  4. filename adalah nama file input
  5. > mengalihkan output ke item berikut
  6. newFileName file baru di mana output akan disimpan.

Seperti yang Anda perhatikan, Anda tidak akan menghapus hal-hal di file Anda. grepakan membacanya dan file lain akan disimpan, dimodifikasi sesuai.

sidyll
sumber
@Kevin Duke: Alas! Itu mungkin berarti Anda belum grepmenginstal. Bagaimanapun saya akan merekomendasikan Anda menginstal GNU grep, itu pasti akan bekerja pada Windows, dan ini adalah alat yang sangat berguna.
sidyll
@ Slyllll itu tahu apa grep itu dan itu melakukan banyak output, itu bisa jadi karena saya tidak menentukan file output
lemon
2
@Kevin Duke: seperti yang saya katakan sebelumnya dalam jawaban, hasilnya dapat diarahkan. Perilaku standar adalah mencetak di layar. Untuk mengarahkan, Anda menggunakan pipa ( >dalam hal ini), memberikan perintah terakhirgrep -v help filename > outputFileName
sidyll
Terima kasih, saya pasti akan mencoba ini!
lemon
grep> sed setiap hari dalam seminggu untuk MENCARI urutan karakter
kwikness
13

Anda dapat melakukan ini menggunakan sed: sed '/help/ d' < inputFile > outputFile

Tikhon Jelvis
sumber
4
@CengizFrostclaw: Di baris perintah di Linux / Mac / Terserah. Jika Anda menggunakan Windows, Anda harus menginstal sesuatu seperti CygWin dan menggunakannya.
Tikhon Jelvis
Terima kasih @TikhonJelvis! Dan satu pertanyaan terakhir, dapatkah kita melakukan 'bantuan /' untuk menghapus semua baris yang dimulai (tidak berisi) dengan bantuan?
jeff
3
@CengizFrostclaw: Saya pikir sed '/^help/ d'harus bekerja. The ^mewakili awal baris.
Tikhon Jelvis
@jeff PowerShell memiliki seddangrep
Ooker
cygwin tidak dapat bekerja di windows dengan file utf-16. Utilitas Cygwin menggunakan UFT-8 secara default. Sangat sedikit dari mereka yang mendukung UTF-16. Gunakan babun babun.github.io . Ini bertindak sebagai pembungkus cygwin, tetapi menyediakan banyak hal di luar kotak.
Sahil Singh
9

Cari dengan ekspresi reguler:

^.*(help).*$
Rob Rob
sumber
2
Bagaimana dengan bagian penghapusan?
Peter Mortensen
1
@PeterMortensen Temukan \n\n, ganti dengan `` (tidak ada)
Leo
6

Jika Anda menggunakan Windows , coba findstr. Alat pihak ketiga tidak diperlukan:

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

Ini mendukung regex juga! Baca saja bantuan alat ini findstr /?.

NB Jika Anda ingin bekerja dengan file besar dan besar (seperti file log 400 MB) editor teks tidak terlalu efisien dalam memori, jadi, seperti yang telah ditunjukkan seseorang, alat baris perintah adalah cara yang harus dilakukan. Tapi tidak ada grep di Windows, jadi ...

Saya hanya menjalankan ini pada file log 1 GB, dan itu benar-benar memakan waktu 3 detik.

Alex
sumber