Je veux récupérer la sortie de mon ls -l
commande:
-rw-r--r-- 1 root root 1866 Feb 14 07:47 rahmu.file
-rw-r--r-- 1 rahmu user 95653 Feb 14 07:47 foo.file
-rw-r--r-- 1 rahmu user 1073822 Feb 14 21:01 bar.file
Je veux courir grep rahmu
sur la colonne $ 3 uniquement, donc la sortie de ma commande grep
devrait ressembler à ceci:
-rw-r--r-- 1 rahmu user 95653 Feb 14 07:47 foo.file
-rw-r--r-- 1 rahmu user 1073822 Feb 14 21:01 bar.file
Quelle est la manière la plus simple de procéder? La réponse doit être portable sur de nombreux Unices, en se concentrant de préférence sur Linux et Solaris.
NB: je ne cherche pas un moyen de trouver tous les fichiers appartenant à un utilisateur donné. Cet exemple n'a été donné que pour clarifier ma question.
Une fois de plus awk
sauve la mise!
Voici une façon simple de le faire, avec une syntaxe relativement simple:
ls -l | awk '{if ($3 == "rahmu") print $0;}'
ou encore plus simple: (Merci à Peter.O dans les commentaires)
ls -l | awk '$3 == "rahmu"'
Si vous cherchez à ne faire correspondre qu'une partie de la chaîne sur une colonne donnée, vous pouvez utiliser les conseils de https://stackoverflow.com/questions/17001849/awk-partly-string-match-if-column-partly -matches
some_command | awk '$6 ~ /string/'
Si par colonne, vous voulez dire une colonne de taille fixe, vous pouvez:
ls -l | grep "^.\{15\}rahmu"
où ^
signifie le début de la ligne, .
signifie n'importe quel caractère et \{15\}
signifie exactement 15 occurrences du caractère précédent (n'importe quel caractère dans ce cas).
Je sais que je suis en retard à la fête, mais je crois qu'une solution très générale à ce problème est d'utiliser awk avec des expressions régulières comme ceci:
awk '$3~/rahmu/{print}' input_file
La partie entourée de '//' peut être n'importe quel type d'expression régulière.
Pour grep basé sur une seule colonne de nom d'utilisateur (et imprimer uniquement les fichiers), vous pouvez essayer:
ls -la | grep "^-\S\+\s\+\S\+\s\+rahmu"
Pour les répertoires, modifiez -
dans d
, pour tout type supprimez -
.
Il sélectionne essentiellement chaque colonne par \S\+\s\+
qui correspond à un caractère non-espace suivi d'un espace, donc nous faisons correspondre trois premières colonnes puis le nom d'utilisateur.