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.Si vous avez GNU sed, vous pouvez utiliser
qui ajoute un espace avant la 4e et les parenthèses ouvertes suivantes, puis remplace les virgules.
la source
international (uk) location
, en insérant un espace indésirable dans le nom lui-même.s/\([[:digit:]]\+\)(/\1 (/4g
qui ajoutera un espace uniquement s'il y a des chiffres avant la parenthèse.Ce que @ stéphane-chazelas a dit est vrai, mais vous pouvez toujours ajouter l'espace en premier et le diviser en lignes après comme ceci:
Ou dans un seul script sed (sans
-e
):Nous utilisons normalement "
/
" comme séparateur des recherches de commande, mais il accepte également n'importe quel caractère, donc il est parfois plus facile de lire en utilisant d'autres caractères comme ":
" pour éviter les combinaisons comme "/\
".la source