2013-04-11 1 views
4

Je crée un petit script et je dois lister tous mes binaires Tomcat.
Jusqu'à présent, j'ai pu le faire:
ls -1 | grep '\-tomcat\-' | cut -f3 -d'-'

Cette répertorie essentiellement toutes les versions, mais il ajoute le fichier .zip ou .tar.gz
Extraire la sous-chaîne de ls

5.5.17.zip 
5.5.26.tar.gz 
5.5.27.tar.gz 
5.5.28.tar.gz 
5.5.31.tar.gz 
5.5.32.tar.gz 


Je voudrais savoir comment supprimer .zip et .tar.gz des chaînes extraites.

Répondre

5

Ou simplifier l'approche globale:

ls apache-tomcat*|sed -r 's/^.*-([0-9.]+)\..*/\1/' 

outils moins, et il vous donne les numéros de version.

P.S .: Suite à la suggestion de @ Nemo: nous laissons la globalisation du shell et les connaissances préalables prendre en charge la moitié du travail (il suffit de lister les choses qui ressemblent réellement à apache-tomcat). Lorsque la sortie de ls est redirigée vers un autre outil, le -1 est inutile, donc nous nous en débarrassons. sed prend les valeurs provenant de ls, correspond au début de la ligne à la première - suivi d'un chiffre, les parenthèses se souviennent de tous les chiffres & périodes littérales, puis nous faisons correspondre le reste de la chaîne jusqu'à la fin de la ligne (implicite). Et puis tout le match est remplacé par les chiffres mémorisés & périodes.

+1

+1, c'est ce que je voulais poster. Cependant, certaines explications seraient bien. – nemo

4

l'envoie à une autre cut:

ls -1 | grep '-tomcat-' | cut -f3 -d'-' | cut -f1-3 -d'.' 

Cela fonctionne aussi longtemps que les versions ont tous trois composants. Si la version est juste 5.5, cela ne fonctionnera pas.

Une autre option serait juste d'utiliser sed:

ls -1 | grep '-tomcat-' | cut -f3 -d'-' | sed 's/.tar.gz\|.zip//' 

Cela supprimera .tar.gz ou .zip des cordes.

1

ls -1 | awk -F. '/-tomcat-/ {print $1}'

une solution en utilisant awk. Toutes les réponses précédentes fonctionneraient exactement de la même manière.

EDIT:

j'ai mal compris, peut-être c'est ce que vous êtes après:

ls -1 | awk -F\- '/tomcat/ {print substr($3,0,6)}'