Mein sed Befehl ist,
sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'
Es muss zurückkehren,
bcde:cdeaf
(dh) alle Zeichen vor dem ersten Doppelpunkt in der Zeile und dem Doppelpunkt selbst müssen entfernt werden.
Damit wird aber nichts entfernt.
Meine Verwirrung entsteht hauptsächlich durch,
1) Müssen Parens für Pattern Matching in sed regex-es maskiert werden?
2) In beiden Fällen (mit Flucht / ohne Flucht) funktioniert es nicht. Ich habe es versucht,
sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 's/[^:]*://'
.d
Übrigens, Sie löschen die Eingabezeile nicht, sondern ändern sie mit einems///
Ubstitution-Befehl. Sie müssen das erste Bit ohne Doppelpunkt und den darauf folgenden Doppelpunkt durch gar nichts ersetzen.printf "%s\n" "${line#*:}"
...while read line
, die das bekommt$line
,sed
sollte das wohl vorgezogen werden.Antworten:
Der erste
^
bedeutet den Beginn der Zeile. Das[^:]
ist nur der einzige Weg , ich weiß , wie man schreibt nicht einen Doppelpunkt . Das*
Nach-dem-Doppelpunkt bedeutet eine beliebige Anzahl der Dinge direkt vor mir (in diesem Fall das Nicht-Doppelpunkt). Schließlich:
wählt der den Doppelpunkt.Mit anderen Worten, wählen Sie den Zeilenanfang, eine beliebige Anzahl von Dingen, die kein Doppelpunkt sind, und den ersten Doppelpunkt aus.
Das
//g
bedeutet, dass jede übereinstimmende Instanz gelöscht wird.quelle
^
Ihr Match nicht verankern, es sei denn, Sie fügen auch eineg
globale Flagge hinzu. Es kann immer nur eing
erstes Vorkommen eines Musters geben, und daher entfernt das globale Flag nicht alle[^:]*:
Muster aus einer Linie, wie dies der Fall wäre, wenn Sie es nicht^
verankern würden. Anstatt den regulären Ausdruck mit zwei unnötigen Flags zu komplizieren, die nur dazu dienen, sich gegenseitig aus dem Gleichgewicht zu bringen, können Sie sie einfach weglassen. Dies wurde in der bearbeiteten Version dieser Antwort demonstriert, bevor Sie sie rückgängig machten. Warum Sie darauf bestehen würden, schlechte Informationen zu verbreiten, weiß ich nicht, aber das macht dies zu einer schlechten Antwort.sed
Fähigkeiten zu verbessern . Ich bin neu insed
der sehr eingeschränkten Syntax, die ich bisher aufgegriffen habe , und fühle mich noch nicht wohl damit. Dassed
(heh), ich denke, meine Antwort löst das Problem von OP, obwohl es nicht die optimale (dh Ihre) Antwort ist. Dies ist Stack Exchange, nicht Wikipedia. Korrigieren Sie mich, wenn ich falsch liege. Wenn Sie jedoch eine bessere Antwort kennen, sollten Sie sie posten, damit die Leute die verschiedenen Ansätze sehen und vergleichen können. Bitte verwandeln Sie meine Antwort nicht in Ihre Antwort mit der Bearbeitungsfunktion .Um mit Spalten zu arbeiten, gibt es
cut
:das gleiche tun
Und andere Version mit
sed
(schneller für Big Data):Und eher exotisch in
bash
oder
oder
quelle
sed 's/[^:]*://'