Hat es nicht getan
strintg: Content-Length: 304\0d matched: Content-Length: 304 replaced by: 304 result: 304\0d
Es wurde nicht angepasst und daher nicht entfernt. Es ist einfach dort geblieben.
Ich wollte die Größe der Content-Length aus einer URL extrahieren und die URL + $ size in derselben Zeile ausgeben.
Die Daten, mit denen ich gearbeitet habe:
> curl -I -s http://yahoo.com HTTP/1.1 301 Redirect Date: Thu, 10 Mar 2016 13:58:34 GMT Via: https/1.1 ir18.fp.bf1.yahoo.com (ApacheTrafficServer) Server: ATS Location: https://www.yahoo.com/ Content-Type: text/html Content-Language: en Cache-Control: no-store, no-cache Connection: keep-alive Y-Trace: BAEAQAAAAADEVnKTAIhTVAAAAAAAAAAA52rmwEDlxSwAAAAAAAAAAAAFLbI13bX.AAUtsjXdvxvBYm3xAAAAAA-- Content-Length: 304
Hier ist ein vereinfachtes Beispiel. Ich extrahierte die Content-Length und schnitt einfach das Feld ab, das ich brauche. Anstelle der URL empfange ich nur ein "a":
> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | cut -f2 -d" "); echo $size"a" > a04
Das "a"
überschreibt die erste Ziffer.
Es stellt sich heraus, dass die Content-Length-Kopfzeile mit einem 0D-Zeichen geschlossen ist und zusammen mit den Zahlen dieser Wagenrücklauf erscheint. Ich dachte, cut
das wäre nicht klug genug, um die 0D auszuschalten, aber einfach durch das Ändern der Extraktion in ein reguläres Ausdrückwerkzeug verhält es sich genauso:
> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | sed 's/Content-Length: \([[:digit:]]*\)/\1/'); echo $size"a" > a04
Was bedeutet, dass die Zeichenklasse [[: digit:]] auch das 0D-Zeichen enthält. Ich habe versucht, das Ende der Zeichenfolge explizit zu markieren, und es hat funktioniert:
> size=$(curl -I -s http://yahoo.com | grep "Content-Length:" | sed 's/Content-Length: \([[:digit:]]*\).*/\1/'); echo $size"a" > 304a
TL; DR: Warum enthielt die Regex-Zeichenklasse das 0D-Zeichen?
Hat es nicht getan
strintg: Content-Length: 304\0d matched: Content-Length: 304 replaced by: 304 result: 304\0d
Es wurde nicht angepasst und daher nicht entfernt. Es ist einfach dort geblieben.