Wenn ich schreibe
$ grep \$
dann wird alles, was ich am Terminal eingebe, abgeglichen und am Terminal ausgedruckt. Wie wird \$
interpretiert?
Wenn ich schreibe
$ grep \$
dann wird alles, was ich am Terminal eingebe, abgeglichen und am Terminal ausgedruckt. Wie wird \$
interpretiert?
Antworten:
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.
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 $
an grep
, das mit dem Zeilenende übereinstimmt. Da jede Zeile ein Ende hat, sollte jede Zeile übereinstimmen :)
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
$ grep \\$
oder
$ grep '\$'
echo \$
und dannecho \\$