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
4 Réponses :
voir ici p> ceci était le REGEX101.com généré Perl: p> ici est un exemple utilisant un groupe de capture nommé de ^ Amplitude maximale: \ s * (-? \ d \. \ d +) \ n code>
^ code> représente au début de la ligne. li>
amplitude maximale: code> s'assure que vous avez une ligne correcte li>
\ s * code> zéro ou plus d'espace blanc li>
( code> ) code> représente un groupe de capture - ce que vous voulez regex retourner li>
-? code> signifie éventuellement un symbole moins li>
\ d code> représente un seul chiffre li>
\. code> représente la décimale li>
\ d + code> représente 1 chiffre ou plus li>
\ n code> représente le caractère de nouvelle ligne - qui provoque des pauses de ligne. li>
ul> amp code>. p>
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 ..
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.
Je le ferais dans Awk: Ce filtre par des lignes correspondant amplitude maximale: code> puis imprime le dernier champ séparé de cette ligne. < / p> p>
Imprimez uniquement la ligne avec une correspondance et modifiez cette ligne.
sed -n '/Maximum amplitude/ s/.* //p' inputfile
Regex ne supporte pas les constructions d'agrégation. Vous devez utiliser une langue spécialisée avec regex.