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.Wenn Sie GNU sed haben, könnten Sie verwenden
Dies fügt ein Leerzeichen vor dem 4. und den nachfolgenden offenen Klammern hinzu und ersetzt dann die Kommas.
quelle
international (uk) location
indem ein unerwünschtes Leerzeichen in den Namen selbst eingefügt wird .s/\([[:digit:]]\+\)(/\1 (/4g
, dass nur dann ein Leerzeichen hinzugefügt wird, wenn vor der Klammer Ziffern stehen.Was @ stéphane-chazelas gesagt hat, ist wahr, aber Sie können das Leerzeichen immer zuerst hinzufügen und danach wie folgt in Zeilen aufteilen:
Oder in einem einzigen sed-Skript (ohne
-e
):Normalerweise verwenden wir "
/
" als Trennzeichen für Befehlssuche (n), aber es akzeptiert auch jedes Zeichen. Daher ist es manchmal einfacher, mit anderen Zeichen wie ":
" zu lesen , um Kombinationen wie "/\
" zu vermeiden .quelle