echo "Linux/DEB/mainbinary-0.1.20190424165331-0-armdef.deb" | grep -oE "([^\/]+$)" This prints just the filename, without the directory structure, but I cannot manage to print just mainbinary from that string. Suggestions?
3 Réponses :
echo "Linux/DEB/mainbinary-0.1.20190424165331-0-armdef.deb" |grep -oP '.*/\K[^-]+' mainbinary This will scan till last / and ignore everything to its left and keep moving until - (excluding)
La puissance supérieure de Perl Regex :)
Malheureusement, GREP dispose d'un support E / étendu mais non P / PERL sur le matériel que j'essaie de courir. J'apprécie la suggestion, cependant.
@ user2725742 SO GNU SED (si nécessaire pour votre réponse acceptée) est présent sur chaque plate-forme que vous avez, mais GNU Grep n'est pas? Vous voudrez peut-être vérifier cela juste pour vous assurer.
et a sed code> alternatif à PS. L'excellent
grep -op code>
Cette fonctionnalité «SED» est prise en charge sur tout le matériel que mon script fonctionnera potentiellement pour que vous soyez le gagnant.
avec n'importe quel awk dans n'importe quelle coquille sur n'importe quelle machine UNIX:
$ echo "Linux/DEB/mainbinary-0.1.20190424165331-0-armdef.deb" | awk -F'[/-]' '{print $3}' mainbinary
Fonctionne bien pour cet exemple, mais malheureusement, l'arborescence de répertoires qui vit chaque .deb est différente, l'indexation ne fonctionne pas.
C'est pourquoi vous ne devriez jamais simplement fournir 1 échantillon dans votre question - toujours fournir suffisamment d'un exemple de reproductible minimal pour démontrer de manière adéquate vos besoins.
Passer à un autre
grep code> peut-être?
J'ai essayé cela, mais je ne pouvais pas obtenir à GREP de retourner "jusqu'à un premier trait d'union" pour une raison quelconque.