Ich habe eine Textdatei, die etwa 300 KB groß ist. Ich möchte alle Zeilen aus dieser Datei entfernen, die mit dem Buchstaben "P" beginnen. Das habe ich benutzt:
%Vor%Dies wird nicht an die Konsole ausgegeben. Ich kann cat für die Datei ohne weitere Befehle verwenden und es wird gut ausgedruckt. Meine letzte Absicht ist es:
%Vor%Es erscheint kein Fehler, es wird nur nichts ausgedruckt und wenn ich den 2. Befehl ausführe, ist new.txt leer. Ich sollte sagen, dass ich Windows 7 mit Cygwin installiert habe.
^
, um dein Muster am Anfang der Zeile zu verankern; sed
übereinstimmende Zeilen und die d
-Flagge . Verwenden Sie sed
-only:
Mit awk:
%Vor%!
( Negation ), das negiert das folgende Muster;
/^P/
bedeutet "Übereinstimmung mit allen Zeilen, beginnend mit einer Groß- / Kleinschreibung P
" , P
" . awk
genutzt, wenn { … }
( Aktionsblock ) fehlt, dh um den Datensatz auszudrucken, der die Bedingung validiert. Um es also anders auszudrücken, ignoriert es Zeilen, die mit einem capital P
beginnen, und druckt alles andere .
sed
ist zeilenorientiert und awk
spaltenorientiert. Für Ihren Fall sollten Sie den ersten verwenden, siehe Edouard Lopez 'Antwort.
Verwenden Sie den Anfang der Zeilenmarkierung und der Anführungszeichen:
%Vor% P*
bedeutet P null oder mehrmals, also zusammen mit -v
gibt es keine Zeilen
^P.*
bedeutet Anfang der Zeile, dann P und jedes Zeichen null oder mehr Male
Zitieren ist erforderlich, um die Shell-Erweiterung zu verhindern.
Dies kann zu
verkürzt werden %Vor% weil .*
nicht benötigt wird, daher wird keine Angabe benötigt und egrep
kann Daten aus der Datei lesen.
Da wir keine erweiterten regulären Ausdrücke verwenden, funktioniert grep
auch gut
Endlich
%Vor%Tags und Links bash