Je sais donc que des outils existent pour ce problème parce que j'en ai entendu parler, mais je ne sais pas ce qu'ils sont.
Je veux faire quelque chose comme filtrer toutes les données, mais les noms d'utilisateur dans / etc / passwd.
Par exemple, je voudrais récupérer user1, user2 et user3 dans le fichier suivant. Dans ce cas, la logique pourrait être "Saisir le texte jusqu'au premier ':' sur chaque ligne du fichier".
user1:x:1:4
user2:x:2:5
user3:x:3:6
La sortie serait:
user1
user2
user3
awk
prend un nom de fichier, vous pouvez donc sauter la pipe et faireawk -F: '{print $1}' /etc/passwd
tr
etat
sont quelques exemples des quelques choses qui ne le font pas).Voici une doublure Perl:
la source
Sous perl et awk, il existe un troisième outil pour de tels travaux, qui est sed:
Il s'agit de la commande de substitution: substitute from colon:, suivie d'un point, qui est un joker pour les caractères de toute nature, de tout nombre (*), sans rien.
Il s'agit de '(ubstitute) / FROM / TO /' avec TO étant vide, ce qui signifie 'supprimer tout du premier (car sed est par défaut gourmand) deux points (jusqu'à la fin de la ligne, car sed fonctionne bien avec des lignes entières).
Bien sûr,
cut
c'est aussi une bonne commande, mais je dirais d'une famille différente.la source
Dans votre exemple, les 3 noms sont tous de la même longueur. Dans de tels cas - ce qui pourrait arriver, mais ce n'est pas si probable avec / etc / passwd - vous pourriez aussi utiliser colrm:
ou bien sûr
(un cas rare où
useless use of cat
ne s'applique pas, car vous ne pouvez pas remettre un fichier à la main pour agir en tant que paramètre.)la source
cat
est toujours là inutile:colrm 6 < FILE
.cat foo | grep bar
.Juste pour être complet, il n'y a pas besoin de commandes externes, le shell (Bourne shell ou compatible) peut le gérer seul:
Bien sûr, c'est probablement la plus lente de toutes les solutions possibles, alors pour les fichiers volumineux, choisissez-en une autre.
la source