2009-06-10 4 views
0

J'ai un simple fichier texte ./version contenant un numéro de version. Malheureusement, parfois le numéro de version dans le fichier est suivi par des espaces et des sauts de ligne commeComment extraire et couper une chaîne de version à partir d'un fichier dans bash

1.1.3[space][space][newline] 
[newline] 
[newline] 

Quelle est la meilleure, plus facile et plus court chemin pour extraire le numéro de version dans une variable bash sans les espaces de fin et des sauts de ligne? J'ai essayé

var=`cat ./version | tr -d ' '` 

qui travaille pour les espaces blancs mais quand un tr -d '\n' il annexant ne fonctionne pas.

Merci, Chris

Répondre

0

Je ne sais toujours pas pourquoi, mais après la suppression et de recréer le fichier version cela a fonctionné:

var=`cat ./version | tr -d ' ' | tr -d '\n'` 

Je suis confus ... que pouvez-vous faire différent lors de la création d'un fichier texte. Cependant, cela fonctionne maintenant.

+2

Vous pouvez faire cela avec un appel à tr en mettant l'espace et le retour à la ligne entre crochets: var = $ (cat ./version | tr -d '[\ n]') - Dennis Williamson il ya 0 secondes [supprimer commentaire] –

2
$ echo -e "1.1.1 \n\n" > ./version 
$ read var < ./version 
$ echo -n "$var" | od -a 
0000000 1 . 1 . 1 
0000005 
2

Bash pur, aucun autre processus:

echo -e "1.2.3 \n\n" > .version 

version=$(<.version) 
version=${version// /} 

echo "'$version'" 

Résultat: '1.2.3'

0

J'aime la version pure de fgm's answer.

I fournissent cette commande d'une ligne pour supprimer également d'autres caractères le cas échéant:

perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' 

Le numéro de version extraite est coupé/dénudée (pas de symboles de saut de ligne ou retour chariot):

$> V=$(bash --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/') 
$> echo "The bash version is '$V'" 
The bash version is '4.2.45' 

Je fournis plus d'explications et donne d'autres commandes plus sophistiquées (mais encore courtes) d'une ligne dans my other answer.

Questions connexes