0
votes

Sélectionnez la valeur avec une expression régulière

J'ai peu de connaissances d'expressions régulières, je voudrais donc savoir si vous ne pouvez sélectionner que la valeur d'amplitude maximale de ce texte renvoyé par le programme SOX? Dans ce cas, par exemple, je voudrais sélectionner uniquement 0,712219

Samples read:           6615000
Length (seconds):     75.000000
Scaled by:         2147483647.0
Maximum amplitude:     0.712219
Minimum amplitude:    -0.805969
Midline amplitude:    -0.046875
Mean    norm:          0.009264
Mean    amplitude:    -0.000027
RMS     amplitude:     0.043011
Maximum delta:         0.734100
Minimum delta:         0.000000
Mean    delta:         0.008353
RMS     delta:         0.041470
Rough   frequency:         6767
Volume adjustment:        1.241


1 commentaires

Regex ne supporte pas les constructions d'agrégation. Vous devez utiliser une langue spécialisée avec regex.


4 Réponses :


0
votes

^ Amplitude maximale: \ s * (-? \ d \. \ d +) \ n

voir ici

  • ^ représente au début de la ligne.
  • amplitude maximale: s'assure que vous avez une ligne correcte
  • \ s * zéro ou plus d'espace blanc
  • ( ) représente un groupe de capture - ce que vous voulez regex retourner
  • -? signifie éventuellement un symbole moins
  • \ d représente un seul chiffre
  • \. représente la décimale
  • \ d + représente 1 chiffre ou plus
  • \ n représente le caractère de nouvelle ligne - qui provoque des pauses de ligne.

    ceci était le REGEX101.com généré Perl: xxx

    ici est un exemple utilisant un groupe de capture nommé de amp . xxx


4 commentaires

Je voudrais seulement sélectionner la valeur 0.712219 de la quatrième rangée. En changeant de cette façon:. * Amplitude maximale: \ s * (-? \ D. \ D +) \ N Vous sélectionnez la ligne entière. J'ai seulement besoin de la valeur numérique à la place.


Vous devriez regarder le groupe 1 dans REGEX101. N'ont pas utilisé Regex à Bash beaucoup. Supporter avec moi. Il y a probablement un moyen de mettre cela dans la syntaxe Bash.


D'accord merci quand même. C'est moi que je dois bien étudier les expressions régulières.


Je pense que d'autres ont probablement répondu à cela pour vous maintenant, mieux que je puisse ... mais dans RegEx101, il est possible de convertir à la regex à une langue spécifique. Outils> Générateur de code> Perl par exemple aussi ..



0
votes
perl -nle 'm{Maximum amplitude:\s+(-?\d?\.?\d+)} and print $1' file
0.712219This handles numbers with a negative sign and those with of without a digit followed by a decimal point and any number of digits.

0 commentaires

0
votes

Je le ferais dans Awk: xxx

Ce filtre par des lignes correspondant amplitude maximale: puis imprime le dernier champ séparé de cette ligne. < / p>


0 commentaires

0
votes

Imprimez uniquement la ligne avec une correspondance et modifiez cette ligne.

sed -n '/Maximum amplitude/ s/.* //p' inputfile


0 commentaires