Flucht Schrägstrich "\" in grep
Habe ich die Datei mit der Zeile:
"H:\Check\WP_20140511_029.mp4"
zusammen mit anderen Linien. Ich möchte diese Zeilen entfernt werden, die angibt Verzeichnis auf H:\Check
. Ich habe versucht,
grep -v ".*H:\\Check.*" testout.txt > testout2.txt
Aber nicht löschen Sie diese Zeilen. Was ist Los mit meinem regex .*H:\\Check.*
.
regex101 zeigt , dass mein regex richtig passt die Linie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verwenden:
Ist es wichtig, verwenden Sie einfache Anführungszeichen, um zu vermeiden übermäßige entweichen der backslash.
Verwendung von doppelten Anführungszeichen entsprechende Befehl wird so sein:
EDIT:
\\
in doppelten Anführungszeichen ist äquivalent zu einem einzelnen umgekehrten Schrägstrich durch shell-Erweiterung, das passiert in doppelten Anführungszeichen. Es ist offensichtlich, von dieserecho
Befehle:\\` inside double quotes and two slashes
\` in einfachen Anführungszeichen. Auch deshalb können wir linken aus.*
? Sollten regex-match full-line?grep
regex muss nicht match voller Linie. Nur passend zu Ihrer bekannt patternnH:\Check
nach der Flucht, nichtH:\\Check
. Warum das letztere ist richtig, und ersteres nicht? Wollen einfach nur, um es klarer für mich...\C
bedeutet nur, entkam C Zeichen, das nicht ein Backslash gefolgt von CFirst off, bei der Verwendung von grep, die Sie nicht brauchen, um geben Sie die gewünschten Zeichen ein .* - Kombination. Grep ist bereits gebaut, um Aussehen für die phrase (Beispiel grepping für er in eine Datei, die eine Zeile, die sagt
Hi there
wird wieder die volle Linie, ohne die Notwendigkeit zu verwenden.*he.*
als deine regex funktioniert)Zweiten (Und ich sehe anubhava schlug mich auf den Stempel auf diesen einen, als ich getippt), die backslash-escaping funktioniert anders, je nach Ihrer Verwendung von Anführungszeichen.
Bei Verwendung von single quotes die einzelnen backslash zu entkommen das zweite, so müssen Sie zwei, so dass Ihre regex wird
H:\\Check
.Wenn Sie die Verwendung von doppelten Anführungszeichen (Als Sie sind), der umgekehrte Schrägstrich wird als Escapezeichen für die anderen backslash, während die Angebote sind ausgewertet, dann wird die resultierende backslash werden versuchen, zu entkommen, die C (und die ist nicht sogar nah an, was wir wollen), so dass Sie wirklich brauchen eine Dritte backslash, so dass Sie entkommen korrekt.
Wenn Sie wollte, es zu tun, ohne Anführungszeichen (die meiner Meinung nach nicht sehr guter Stil, aber da Sie ein einziger Satz, Sie könnte wenn Sie wirklich wollten, würden Sie wirklich brauchen, 4 backslashes aus einem ähnlichen Grund. Die \ normalerweise ließ den Befehl weiter an die nächste Zeile, also der erste entweicht der zweite, der Dritte entkommt der 4., dann gibt es nur 2, wenn grep ausgewertet wird, ist das korrekt maskiert.
Sollten Sie versuchen zu spielen, um mit Grep etwas mehr zu sehen, was es fähig, es kann im Grunde jede Suche, die Sie jemals wollen (und noch viel mehr, dass Sie nie wollen), so lange wie Sie wissen, die syntax.
Edit: es wurde ein wenig syntax, danke. Ich wusste nicht, über, dass * konvertiert text in Kursivschrift auf diese Antworten.