2010-11-22 6 views
-1

J'ai une variable dans un script shell,le remplacement d'une variable script shell en Perl

var=1234_number 

Je veux remplacer tout autre que entier de $ var .. comment puis-je le faire en utilisant un onliner perl?

+1

Veuillez clarifier - probablement en montrant la sortie requise, et toutes les exclusions. Le 'remplacer tout autre que l'entier de $ var' n'est pas facile à comprendre. –

+0

la sortie devrait être $ var = 1234 – nachikethas

+0

Je suis sûr que le signe dollar n'est pas voulu dans '$ var = 1234'. Demandez-vous quelque chose pour modifier le fichier de script shell dans son ensemble, ou demandez-vous de supprimer les non-chiffres de la variable comme une action dans le script shell? Que faire si la valeur est actuellement '1234_abc_5678'? –

Répondre

0

Pas besoin d'utiliser autre chose que la coquille pour cette

var=1234_abcd 
var=${var%_*} 
echo $var # => 1234 

Voir « Expansion des paramètres » dans le manuel bash.

1

Vous cherchez peut-être quelque chose à modifier le script shell, auquel cas, cela pourrait être suffisant:

perl -i.bak -e 's/\b(var=\d+).*/$1/' shellscript.sh 

Le « -i » écrase le fichier original, enregistrer une copie dans shellscript.sh.bak ; la commande de substitution trouve des affectations à 'var' (et non plus un nom se terminant par 'var') suivi d'un signe égal, de quelques chiffres et de tous les non-chiffres, et ne laisse que l'attribution des chiffres.

Dans l'exemple, il donne:

var=1234 

Notez que le Perl est regex pas à toute épreuve - il mutiler ce (laissant tomber l'accolade de fermeture).

: ${var=1234_number} 

Faire face à toutes ces variantes possibles est extrêmement assez délicate:

echo $var=$other 

OTOH, vous pourriez être à la recherche d'éliminer les chiffres d'une variable dans un script shell, auquel cas:

var=$(echo $var | perl -e 's/\D//g') 

Vous pouvez également utiliser sed pour le travail:

var=$(echo $var | sed 's/[^0-9]//g') 
+0

Merci Jonathan ... Je voulais juste obtenir la sortie comme 1234 var = $ (echo $ var | perl -e 's/\ D // g') - cela a fait le travail :) désolé pour la faute de frappe, $ var = 1234 – nachikethas

Questions connexes