7
votes

Extrait d'expression régulière String après un colon à bash

J'ai besoin d'extraire la chaîne après le : dans un exemple ci-dessous:

package: projet.abc.def

où j'obtiendrais project.abc.def en conséquence.

Je tente cela à bash et je crois avoir une expression régulière qui fonctionnera : ([^:] *) $ . .

dans mon script bash j'ai package: projet.abc.def en tant que variable appelé apk . Maintenant, comment affecter la même variable la sous-chaîne trouvée avec l'expression régulière?

où le résultat de package: projet.abc.def serait dans la variable apk . Et package: projet.abc.def est initialement dans la variable apk ?

Merci!


1 commentaires

Cela sent la désinstallation automatique ou la désinvente des paquets Android si je ne me trompe pas


3 Réponses :


12
votes

Il n'y a pas besoin d'une regex ici, juste une simple substitution de préfixe: xxx pré>

la syntaxe ## est l'une des expansions des paramètres de Bash. Au lieu de #,% peut être utilisé pour couper la fin. Voir Cette section de la page Bash Man Les détails. P>

Quelques alternatives: P>

$ apk=$(echo $apk | awk -F'package:' '{print $2}')
$ apk=$(echo $apk | sed 's/^package://')
$ apk=$(echo $apk | cut -d':' -f2)


1 commentaires

Cela fonctionne parfaitement, mais ce serait génial si vous pouvez ajouter une explication sur ## chose.



2
votes

Les groupes de capture d'expressions régulières peuvent être trouvés dans le tableau Bash_Rematch CODE>.

[[ $str =~ :([^:]*)$ ]]
# 0 is the substring that matches the entire regex
# n > 1: the nth parenthesized group
apk=${BASH_REMATCH[1]}


0 commentaires

4
votes
$ string="package:project.abc.def"
$ apk=$(echo $string | sed 's/.*\://')
".*:" matches everything before and including ':' and then its removed from the string.

0 commentaires