grep uniquement pour certains mots en ligne
-
28-10-2019 - |
Question
Besoin de grep uniquement le mot entre le 2ème et le 3ème pour durer /
Ceci est montré dans l'extrait ci-dessous, pour noter que l'emplacement sur le nom de fichier n'est pas toujours le même en comptant depuis l'avant.Toutes les idées seraient utiles.
/ home / user / Drive-backup / 2010 Backup / 2010 Account / Jan / usernameneedtogrep / user.dir / 4.txt
La solution
J'utiliserais awk
:
awk -F/ '{print $(NF-2)}'
- se divise sur
/
-
NF
est l'index de la dernière colonne,$NF
la dernière colonne elle-même et$(NF-2)
la 3e à la dernière colonne.
Vous devrez bien sûr d'abord filtrer les lignes de votre entrée qui ne sont pas des chemins (par exemple en utilisant grep
puis en redirigeant vers awk
)
Autres conseils
Voici un script Perl qui fait le travail:
my $str = q!/home/user/Drive-backup/2010 Backup/2010 Account/Jan/usernameneedtogrep/user.dir/4.txt!;
my $res = (split('/',$str))[-3];
print $res;
usernameneedtogrep
une expression régulière comme celle-ci devrait faire l'affaire:
/.\/(.+?)\/.*?\/.*$/
(notez que j'utilise des recherches paresseuses (+?
et *?
) afin qu'elles n'incluent pas de barres obliques là où nous ne le voulons pas)