
Hier gibt es ein BeispielVerknüpfungum sed
:
Um die erste Zahl in allen Zeilen zu löschen, die mit einem „#“ beginnen, verwenden Sie:
sed '/^#/ s/[0-9][0-9]*//'
Was ist der Vorteil des ersten Musters ( /^#/
)? Es könnte einfach sein:
sed 's/^#[0-9][0-9]*//'
Antwort1
Das allgemeine Format der sed
Befehle ist
[address[,address]] function
Wenn ein Befehl nur eine Adresse hat, wird er auf allen Zeilen ausgeführt, die dieser Adresse entsprechen. Wenn ein Befehl keine Adresse hat, wird er auf jeder einzelnen Zeile ausgeführt.
Referenz:POSIXsed
Zu Ihren konkreten Beispielen:
/^#/ s/[0-9][0-9]*//
Dieser Befehl hat eine Adresse,
/^#/
, die mit allen Zeilen übereinstimmt, die mit einem beginnen#
.Das Ersetzungsmuster ist
/[0-9][0-9]*/
. Dies entspricht der ersten Ziffernfolge, wo immer sie in der Zeile vorkommt.Zusammenfassung in einfachem Englisch: Löschen Sie die erste Ziffernfolge jeder Zeile, die mit einem beginnt
#
.Beispiel:
# non-digits|5555|non-digits|5555
wird# non-digits||non-digits|5555
s/^#[0-9][0-9]*//
Da keine Adresse vorhanden ist, wird dieser Befehl auf jede einzelne Zeile angewendet.
Das Substitutionsmuster
/^#[0-9][0-9]*/
entspricht einer Folge aufeinanderfolgender Ziffern, denen ein#
verankertam Anfang der Zeile.Zusammenfassung in einfachem Englisch: Löschen
#
, gefolgt von einer Ziffernfolge (und nur diesem Muster) vom Anfang jeder Zeile an.Beispiel:
#5555|non-digits|5555
wird zu|non-digits|5555
,# non-digits|5555|non-digits|5555
bleibt aber unverändert, da das Ersetzungsmuster nicht übereinstimmt.
Antwort2
Die erste Option passt zu und ersetzt:
#abc99
Der Zweite wird es nicht tun.
Außerdem wird mit dem zweiten auch das anfängliche entfernt #
.