Je divisais la sortie de id
pour 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 sed
commandes 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 sed
commandes 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-054
pourrait aider.