Verwijder alle regels in Notepad++ behalve regels die een woord bevatten dat ik nodig heb?
Ik heb een tekstbestand en wil regels die begonnen zijn met <Path>
behouden, en alle andere regels verwijderen.
Hoe kan ik dat doen?
Ik heb een tekstbestand en wil regels die begonnen zijn met <Path>
behouden, en alle andere regels verwijderen.
Hoe kan ik dat doen?
Er is een gemakkelijke manier om dit te bereiken. U moet 2 stappen uitvoeren.
Ga naar het Zoek menu > Zoek… > Selecteer “Mark” Tab. 2. Activeer reguliere uitdrukkingen. Zoek naar ^<Path>
(^
is voor regel start). Vergeet niet “Bladwijzerregels” aan te vinken en druk op “Alles markeren”
Dit kan eigenlijk in twee stappen worden gedaan vanaf 6.3. De Commissie is van mening dat het een goede zaak zou zijn als de lidstaten de nodige maatregelen zouden nemen om de problemen op te lossen. Ik denk dat het eerder kan, want ik had 5.9 toen ik het voor het eerst probeerde.
Met stamapost als basis voor dit antwoord. Er is nu één stap minder. Markeer lijnen en verwijder ongemarkeerde lijnen. Gedaan. Gedetailleerde instructies volgen.
^<Path>
(^
is voor lijnstart). Vergeet niet “Bladwijzerregels” aan te vinken en op “Alles markeren” 2 te drukken. 2. Zoekmenu -> Bladwijzer -> Verwijder ongemarkeerde regels.
regex replace
replace
Use ^(?!<Path>).*\r\n
to replace matches with empty string. De algemene versie zou ^(?!.*?test).*\r\n
zijn. Dit verwijdert geen lege regel aan het einde van het bestand. Alle andere regels worden verwijderd, inclusief meerdere opeenvolgende lege regels.
(?!)
is een negatieve look up. ^.*test.*$
selecteert de hele regel die de gevraagde tekst bevat.
[\r\n]{2,}
komt overeen met elke \r\n
die meer dan eens voorkomt als dit Windows Nieuw is. als je Linux of een ander besturingssysteem hebt moet je hier misschien mee rommelen. de tweede is om het te vervangen door een retourregel.
Het lijkt mij dat de eenvoudigste manier is om gewoon de “Zoek alles in huidig document” functie te gebruiken en dan ofwel de resultaten in een nieuw bestand te kopiëren of alles te selecteren en te vervangen in het huidige bestand.
Dit zou alle regels met uw tekst vinden en ze onderaan opnoemen. Klik met de rechtermuisknop op het zoekresultaat en kopieer/plak.
Ga naar het menu. Zoek… Activeer reguliere uitdrukkingen. Zoek naar “^Path” (^ is voor regel start).
Klik op de knop “Find all in Current Document”.
Het venster “Find result” verschijnt met alle regels van het patroon. Selecteer kopiëren/plakken naar een nieuw tabblad in Notepad++.
In dit nieuwe tabblad, ga naar: menu Search -> Replace… -> Activeer reguliere uitdrukkingen.
In het veld “Zoek wat:”, gebruik het patroon: “Regel \d+: ”. Laat het veld “Vervangen door:” leeg.
Klik op de “Vervang alles” knop.
Op voorwaarde dat u daadwerkelijk wilt matchen met <Path>
en niet met een bestandssysteem pad, kunt u dit proberen vanaf een opdrachtregel met behulp van Perl:
perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt
Het werkte met Strawberry Perl op Windows, dus pas het aan als de resultaten niet zijn wat u verwacht.
Het is onhandig, maar kopieer het allemaal naar Excel , en gebruik dan =IF(LEFT(A1,6)="<Path>",A1,"")
en kopieer die formule helemaal naar beneden. Kopieer dat dan terug naar Notepad++. Het is niet ideaal, maar het is vrij eenvoudig (als je Excel hebt). Waarschuwing: Het zal niet goed werken met ingesprongen lijnen (Excel zal de kolommen verschuiven, etc.).
Er is geen gemakkelijke manier om te doen wat je wilt met Notepad++. Je moet ofwel een programma downloaden naar je computer ofwel iets in VB (ik neem aan dat je op Windows zit).
Je kunt op twee manieren doen wat je wilt met sed. Het hulpprogramma sed is een favoriet op *nix en kan voor Windows gevonden worden bij de grote mensen van GnuWin http://gnuwin32.sourceforge.net/packages/sed.htm ). Je zou dit programma downloaden, en dan je commando uitvoeren vanaf de commando prompt.
Verwijder alle regels die niet bevatten :
sed -i '/^<PATH>/!d' file
Print alle regels die een nieuw bestand bevatten:
sed -n '/^<PATH>/p' file > newfile
Ik stel voor dat je de regels die je wilt afdrukken naar een nieuw bestand gebruikt. De reden hiervoor is dat je waarschijnlijk niet voor het eerst het regex statement krijgt. Het hulpprogramma sed gebruikt Regular Expression Basic Syntax (zie de referentie op http://www.regular-expressions.info/reference.html ). Als er zoiets is als een *nix pad (/var/www) dan zul je het / karakter moeten ontlopen om je regex te laten werken.
Voorbeeld: sed -n '/^\/var\/www/p' file > newfile
Dit zal alle regels die beginnen met ‘/var/www’ uitprinten. Als ik heb gearchiveerd om te ontsnappen aan het / karakter, dan zou het commando een fout hebben gegooid. Je kunt een speciaal karakter (zoals /) met het backslash karakter ontlopen.
Gebruik Search->Replace en voer een reguliere expressie in zoals ^[^].*
en vervang alles door een lege tekenreeks met behulp van Regular expression
. De volgende stap is het vinden van lege regels om \n\n
te vervangen door \n
met behulp van Extended
meerdere malen tot 0 occurrences were found.
(gebruik \r\n\r\n
en \r\n
afhankelijk van het bestandsformaat). Als u zeer veel lege regels op een rij heeft, is het sneller om \n\n\n\n\n\n\n
of zelfs meer \n
:s te gebruiken in de zoekstring.