Ich möchte grep
mit einem PCRE-Ausdruck verwenden, der das <
Zeichen enthält . Bash glaubt, ich möchte umleiten, aber ich möchte nicht. Wie kann ich entkommen <
?
10
Ich möchte grep
mit einem PCRE-Ausdruck verwenden, der das <
Zeichen enthält . Bash glaubt, ich möchte umleiten, aber ich möchte nicht. Wie kann ich entkommen <
?
Ich konnte es mit einem Backslash machen:
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
Ein zitierter weniger als und ein zitierter Backslashed weniger als beide gaben doofe Antworten.
grep -oP '(?< )(.*)$'
funktioniert : funktioniert zum Beispiel nicht mit einfachen Anführungszeichen. Versuchte es zuerst.(?<! )(.*)$
oder(?<= )(.*)$
?Zwei einfache Regeln:
\C
entgeht dem nächsten Zeichen, was auch immer es ist, außer einer neuen Zeile.'text'
jedes Zeichen zwischen ihnen aus, einschließlich eines Backslashs, jedoch ohne ein einfaches Anführungszeichen (da es das Ende des zitierten Textes markiert).Somit:
Wenn Sie ein Argument übergeben müssen, das einfache Anführungszeichen enthält, können Sie
'\''
ein einfaches Anführungszeichen in einfache Anführungszeichen "maskieren". Technisch gesehen beendet dies den ersten wörtlichen Text, setzt dann ein Literal'
in dasselbe Wort und dann noch mehr wörtlichen Text in dasselbe Wort.Der Rest der Angebotsregeln (zusammengefasst):
!"#$&'()*;<>?[\]^`{|}~
(mit anderen Worten, die folgenden Zeichen sind sicher: Buchstaben, Ziffern%+,-./:=@_
und Nicht-ASCII-Zeichen)."$\`
und buchstäblich verwendet (in Shells mit aktiviertem Verlauf)!
. In der Zeichenfolge wird ein umgekehrter Schrägstrich zwischen doppelten Anführungszeichen angezeigt, sofern er nicht vor einem der nicht wörtlichen Zeichen steht.Diese Regeln gelten für Bash- und andere Bourne-Muscheln (wie Asche und Ksh). Sie gelten auch für zsh (außer dass
=
nach Leerzeichen möglicherweise Anführungszeichen erforderlich sind). Die Regeln in csh / tcsh und in Fish sind unterschiedlich.quelle