unix-sed-Befehl regulären Ausdruck
Kann jemand mir erklären, wie der reguläre Ausdruck funktioniert in der sed-substitute-Befehl.
$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin
$ sed 's/\(\/[^:]*\).**/\1/g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin
Aus der obigen sed-Befehl verwendet, Sie zurück Referenz und speichern Betreiber-Konzept.
Kann jemand mir erklären, wie Sie den regulären Ausdruck vor allem /[^:]* Arbeit in der ersetzen-Befehl, um nur den ersten Pfad, der in jeder Zeile.
sed 's/:.*//' path.txt
wäre ein einfacher Befehl.InformationsquelleAutor Green | 2013-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, man schrieb noch ein extra-Sternchen
*
in Ihrem sed-code, also es sollte wie folgt sein:Ändern Sie das Trennzeichen wird dabei helfen zu verstehen, es ein bisschen besser:
Den
s#something#otherthing#g
ist eine grundlegendesed
Befehl, der sieht fürsomething
und änderungen, die es fürotherthing
alle über die Datei.Wenn Sie
s#(something)#\1#g
Sie dann auf "speichern", diesomething
und dann können Sie es wieder mit\1
.Daher, was es tut, ist man ein Muster wie
/[^:]*
und drucken Sie dann zurück./[^:]*
bedeutet/and then every char except :
. So wird es/
+ alle die saite, bis es findet ein Semikolon:
. Es wird speichern, dass Stück Schnur und dann drucken Sie es zurück.Kleine Beispiele:
InformationsquelleAutor fedorqui
regex entspricht allen Zeichen mit Ausnahme
:
, so würde es passen bis zu diesem:wäre es auch mit diesen,
Als, diese, die alle Zeichen enthält, die nicht
:
.*
die Entsprechung ein beliebiges Zeichen null oder mehrere Male.So, in diesem regex -
[^:]*.*
, passen würden alle diese Ausdrücke:Jedoch bekommen Sie nur das erste Feld (dh
/usr/kbos/bin
durch die Verwendung Rückverweis insed
), weil, reguläre Ausdrücke-Ausgabe die längste mögliche übereinstimmung gefunden.InformationsquelleAutor mohit