Wenn ich schreibe
$ grep \$
dann wird alles, was ich am Terminal eingebe, abgeglichen und am Terminal ausgedruckt. Wie wird \$
interpretiert?
Die Shell interpretiert das Zeichen \$
und übergibt es an grep als $
Zeilenendezeichen. Vorausgesetzt also, Ihre Leitung hat ein Ende, wird es passen :-)
Wenn Sie eine tatsächliche $
in grep abgleichen möchten , verwenden Sie eine der folgenden Optionen:
grep \\\$
grep '\$'
Im ersteren interpretiert die Shell \\
als \
und \$
als $
Geben \$
. In letzterem interpretiert es es überhaupt nicht.
Was Ihre Frage betrifft, warum \$
das Dollarzeichen und nicht die zweistellige Sequenz übereinstimmt, verwenden reguläre Ausdrücke, wie sie in grep
manchen Fällen verwendet werden, Sonderzeichen. Einige davon sind:
$ end of line
^ start of line
. any character
+ 1 or more of the preceeding pattern
* 0 or more of the preceeding pattern
{n,m} between n and m of the preceeding pattern
[x-y] any character between x and y (such as [0-9] for a digit).
zusammen mit vielen anderen.
Wenn Sie ein Literla-Zeichen zuordnen möchten, das normalerweise als Sonderzeichen behandelt wird, müssen Sie es maskieren, damit grep
es als normales Zeichen behandelt wird.
echo \$
und dannecho \\$
ls \$
und zu sehen, dass wir "ls: $: No such file or directory" erhalten. um zu sehen, dass \ $ nicht an $ angehängt ist, aber \\ $ nicht an \ $ angehängt ist und so weiter.Die Shell erweitert zuerst alle Escape-Sequenzen, bevor die Argumente an das Programm übergeben werden. Daher interpretiert sie die
\$
als Escape-Sequenz und übergibt das einzelne Argument$
angrep
, das mit dem Zeilenende übereinstimmt. Da jede Zeile ein Ende hat, sollte jede Zeile übereinstimmen :)quelle
man grep
; es wurde beschlossen , dass$
das Ende der Zeile übereinstimmt, unabhängig davon , ob die Linien durch getrennt sind\n
,\r
beide, oder etwas ganz anderes. Im Allgemeinen können reguläre Ausdrücke verwendet werden, um mit einer beliebigen Zeichenfolge übereinzustimmen, nicht nur mit einer „Zeile“. Sie werden$
verwendet, um mit dem Ende der Zeichenfolge übereinzustimmen.Es wird als Zeilenende-Metazeichen interpretiert. Wenn Sie mit einem tatsächlichen Dollarzeichen übereinstimmen möchten, tun Sie Folgendes
oder
quelle
^
ist für den Anfang der Zeichenfolge und$
für das Ende.oder
passt zu jeder Zeichenfolge, sodass alles, was Sie eingeben, zurückgemeldet wird.
Versuchen
Jetzt werden nur Zeichenfolgen
a
abgeglichen und wiedergegeben, deren letztes Zeichen übereinstimmt .quelle
Wenn Sie nach einem Literal suchen möchten, können Sie sich das Entkommen ersparen
$
, indem Sie den regulären Ausdruck für die Zeichenklasse verwenden. Beispielsweise,quelle