Ich habe die Ausgabe von aufgeteilt id
, um eine besser lesbare zeilenweise Liste der Gruppen bereitzustellen, zu denen ein Benutzer gehört:
id roaima | sed 's/,/\n\t/g'
uid=1001(roaima) gid=1001(roaima) groups=1001(roaima)
24(cdrom)
25(floppy)
...
822413650 (international (uk) location)
Ich wollte die Gruppennummer von ihrem Namen in Klammern trennen, also habe ich den Ausdruck so erweitert
id roaima | sed -e 's/,/\n\t/g' -e '2,$s/(/ (/'
Dies hat jedoch nicht so funktioniert, wie ich es ursprünglich erwartet hatte. Der zweite Ausdruck schien keine Wirkung zu haben.
Um das gewünschte Ergebnis zu erzielen, musste ich stattdessen zwei separate sed
Befehle ausführen:
id roaima | sed -e 's/,/\n\t/g' | sed '2,$s/(/ (/'
uid=1001(roaima) gid=1001(roaima) groups=1001(roaima)
24 (cdrom)
25 (floppy)
...
822413650 (international (uk) location)
Warum brauche ich zwei sed
Befehle in einer Pipe anstatt einen mit mehreren Anweisungen? Oder wenn ich das mit einem machen kann sed
, wie würde ich das machen?
Was ich besonders möchte, ist, dass für jedes einzelne Element (einschließlich der UID und der GIDs in der ersten Zeile) ein Leerzeichen zwischen dem UID / GID-Wert und dem Namen in Klammern steht. Die Einschränkung besteht jedoch darin, dass ich in meinen realen Daten Gruppen haben kann Ich möchte nicht, dass die Namen selbst verstümmelt werden.
-vRS=,
oder-054
könnte helfen.