Je divisais la sortie de idpour fournir une liste ligne par liste plus lisible des groupes dont un utilisateur est membre:
id roaima | sed 's/,/\n\t/g'
uid=1001(roaima) gid=1001(roaima) groups=1001(roaima)
24(cdrom)
25(floppy)
...
822413650 (international (uk) location)
Je voulais séparer le numéro de groupe de son nom entre crochets, j'ai donc étendu l'expression comme ceci
id roaima | sed -e 's/,/\n\t/g' -e '2,$s/(/ (/'
Cependant, cela n'a pas fonctionné comme je m'y attendais initialement. La deuxième expression semble n'avoir aucun effet.
Au lieu de cela, pour obtenir le résultat souhaité, je devais exécuter deux sedcommandes distinctes , comme ceci:
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)
Pourquoi ai-je besoin de deux sedcommandes dans un canal plutôt que d'une avec plusieurs instructions? Ou si je peux le faire avec un sed, comment pourrais-je le faire?
Ce que j'aimerais particulièrement, c'est avoir l'espace unique entre la valeur UID / GID et son nom entre crochets pour chaque élément (y compris l'UID et les GID sur la première ligne), mais la mise en garde est que dans mes données réelles, je peux avoir des groupes contenant des parenthèses dans leurs noms et je ne veux pas que les noms eux-mêmes soient mutilés.
-vRS=,ou-054pourrait aider.