3 votes

Extraire un nombre qui est assigné à une chaîne en utilisant un script Perl

Je ai un fichier input.txt qui contient certaines chaînes et chaque chaîne a certaines valeurs qui lui sont attribuées.

Ma tâche est d'écrire un script Perl pour extraire le nombre qui est attribué à l'une des chaînes.

Par exemple, étant donné ce input.txt

Tom=0×1234,Bob=0x4567,rock=0x8912.

Je dois extraire la valeur qui est attribuée à rock.

J'ai besoin d'aide pour écrire un script pour faire cela.

6voto

Une variante sur @terdon -- pour chaque /rock=(...)/, dis-le :

perl -nE 'say for /rock=(\w+)/'

et une solution avec grep

grep -Po 'rock=\K\w+' file

3voto

Stewart Points 1385

Voici une façon de faire :

$ perl -lne  '/rock=([^.,]+)/ && print $1' file
0x8912

Le /rock=([^.]+)/ va correspondre à la chaîne rock= puis capturer la plus longue série d'un ou plusieurs caractères non-. ([^.]+). Les parenthèses "captureront" la correspondance et la rendront disponible en tant que $1. Si cela correspond, $1 est imprimé.

Le -l supprime les sauts de ligne en fin de chaque ligne d'entrée et ajoute un saut de ligne à chaque appel de print. Le -n indique à perl de lire un fichier d'entrée ligne par ligne et d'appliquer le script donné par -e à chaque ligne.

-3voto

NO WAR WITH RUSSIA Points 7300

Quelque chose comme ça

echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';

Cela compile avec warnings et utilise le nouveau <<>> donc c'est vraiment du bon code perl.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X