Extrait de motif entre une sous-chaîne et de la première apparition du numérique en une chaîne de caractères
Suivant est le contenu d'un fichier:
xxx_component1-1.0-2-2acd314.xc-linux-x86-64-Release-devel.r
xxx_component2-3.0-1-fg3sdhd.xc-linux-x86-64-Release-devel.r
xxx_component3-1.0-2-3gsjcgd.xc-linux-x86-64-Release-devel.r
xxx_component4-0.0-2-2acd314.xc-linux-x86-64-Release-devel.r
Je veux extraire les noms des composants component1 component2 etc.
C'est ce que j'ai essayé:
for line in `sed -n -e '/^xxx-/p' $file`
do
comp=`echo $line | sed -e '/xxx-/,/[0-9]/p'`
echo "comp - $comp"
done
J'ai aussi essayé sed -e 's/.*xxx-\(.*\)[^0-9].*/\1/'
Ceci est basé sur des infos sur le net. Merci de me donner sed
de commande et, si possible, également expliquer progressive
La partie 2. J'ai aussi besoin d'extraire le numéro de version à partir de la chaîne.
numéro de version commence avec les chiffres et se termine avec . suivie par xc-linux.
Comme vous pouvez le voir à maintenir le caractère unique de ses aléatoire des caractères alphanumériques ( la longueur est de 7) en tant que partie du numéro de version.
Par exemple :
xxx_component1-1.0-2-2acd314.xc-linux-x86-64-Release-devel.r
Dans cette chaîne, le numéro de version est : 1.0-2-2acd314
OriginalL'auteur user3662599 | 2014-05-21
Vous devez vous connecter pour publier un commentaire.
Il y a assez peu de moyens pour extraire les données. La forme la plus simple serait
grep
.GNU
grep
:Vous pouvez saisir les données requises à l'aide de GNU
grep
avec PCRE option-P
:Ici, nous utilisons négatif regarder derrière affirmation dire à la capture tout de
_
à un-
pas incusive.awk
:Ici nous dire
awk
à utiliser-
et_
comme délimiteurs et imprimer la deuxième colonne.sed
:Cela dit, vous pouvez également utiliser
sed
pour extraire les données requises à l'aide du groupe de capture:La regex états qui correspondent à n'importe quel caractère zéro ou plusieurs fois jusqu'à un
_
. À partir de ce point, tout capturer jusqu'à ce qu'un-
dans un groupe. Dans la pièce de rechange, nous utiliserons les données saisies dans le groupe en appelant à l'aide du dos de référence, c'est-à\1
.Je suis ici à nouveau avec un autre doute sur le même modèle. que faire Si je veux que cette partie du modèle 1.0-2-2acd314 ( numéro de version). En passant par la ci-dessus xplaination ce qui devrait avoir fonctionnait sed
s/*-[0-9].\(^.xc-*\)-.*/\1/'
Si vous pouvez mettre à jour la question avec tous les scénarios possibles, alors je peux essayer de donner une solution générique qui fonctionne pour tous.
Dans la question initiale de la chaîne de
xxx_component1-1.0-2-2acd314.xc-linux-x86-64-Release-devel.r
Comment puis-je retrive numéro de version qui est 1.0-2-2acd314 .OriginalL'auteur jaypal singh