Die Antworten/Kommentare bisher, dass $
das Ende der Zeile übereinstimmt, sind irreführend. $
in einem Regexp entspricht Ende der Zeichenfolge, das ist alles. Der Grund, warum erscheint, um das Ende der Zeile in sed zu entsprechen, ist, dass sed standardmäßig 1 Zeile gleichzeitig liest, so dass in diesem Kontext (aber nicht in anderen) jede Zeile am Ende der Zeile endet.
So $
Matches End-of-String und wenn die Zeichenfolge enden am Ende einer Zeile dann $
Begegnungen am Ende der Zeile, aber wenn die Zeichenfolge enthält mehrere Zeilen (zB in sed Sie eine mehrzeilige erstellen String in einem Puffer gespeichert) dann passt $
nicht am Ende einer gegebenen Zeile, es entspricht einfach und konsistent am Ende der Zeichenfolge.
In ähnlicher Weise ^
entspricht Start-of-String, BTW, nicht Start-of-Line, wie Sie vielleicht Menschen behaupten hören.
WRT Ihr Kommentar:
my original line is hello, world \n$ and $ is invisible , and $ is replaced by \r, now my line is hello, world\n\r$ .`
Nein, das ist nicht, was geschieht. Ihre ursprüngliche Linie ist:
hello, world\n
und sed liest man \n
-separated Linie zu einer Zeit, so was in seds Puffer gelesen wird, wird die Zeichenfolge:
hello, world
Jetzt $
ist ein regexp metacharacter, dass die Spiele End-of-string so die obige Zeichenfolge gegeben $
nach dem Spiel wird d
(und ^
würde vor h
entsprechen) so, wenn Sie tun
s/$/\r/
Es ändert sich die obige Zeichenfolge:
hello world\r
und dann druckt es, wenn Sed heraus es fügt die Newline zurück und Ausgänge (weil eine Zeichenfolge ohne das abschließende Newline nicht eine Textzeile pro POSIX ist):
hello world\r\n
Beachten Sie, dass $
nie Teil der Zeichenfolge ist, es ist nur ein Metazeichen, dass, wenn in einem regulären Ausdruck entspricht das Ende der Zeichenfolge verwendet, so dass Sie für Zeichen testen können nur am Ende eines Strings oder tun andere erscheinen Operationen (wie oben) nach dem Ende der Zeichenfolge.
Dies könnte helfen: [Die häufigen Fragen zu Stack Overflow Regular Expressions] (http://stackoverflow.com/a/22944075/3776858) – Cyrus
Dieser Befehl macht das Gegenteil von dem, was Sie sagen. – melpomene
Mögliches Duplikat von [Dollarzeichen in regulärem Ausdruck und neuem Zeilenzeichen] (http://stackoverflow.com/questions/13912373/dollar-sign-in-regular-expression-and-new-line-character) – Cyrus