0
votes

Utiliser Grep Regex pour sélectionner au premier trait d'union

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?

2 commentaires

Passer à un autre grep 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.


3 Réponses :


2
votes
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) 

3 commentaires

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.



2
votes

et a sed alternatif à PS. L'excellent grep -op xxx


1 commentaires

Cette fonctionnalité «SED» est prise en charge sur tout le matériel que mon script fonctionnera potentiellement pour que vous soyez le gagnant.



1
votes

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


2 commentaires

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.