Uma variante no @terdon - para cada /rock=(...)/, diga:
perl -nE 'say for /rock=(\w+)/'
e uma solução com grep
grep -Po 'rock=\K\w+' file
Eu tenho um arquivo input.txt
que tem algumas strings e cada string tem alguns valores atribuídos a ele.
Minha tarefa é escrever um script Perl para extrair o número que é atribuído a qualquer uma das strings.
Por exemplo, dado este input.txt
Tom=0×1234,Bob=0x4567,rock=0x8912.
Eu tenho que extrair o valor que é atribuído a rock
.
Eu preciso de ajuda para escrever um script para fazer isso.
Uma variante no @terdon - para cada /rock=(...)/, diga:
perl -nE 'say for /rock=(\w+)/'
e uma solução com grep
grep -Po 'rock=\K\w+' file
Aqui está uma maneira:
$ perl -lne '/rock=([^.,]+)/ && print ' file
0x8912
O /rock=([^.]+)/
corresponderá à string rock=
e, em seguida, capturará o trecho mais longo de um ou mais caracteres que não são .
( [^.]+
). Os parênteses "capturam" a correspondência e a disponibilizam como . Se isso corresponder,
será impresso.
O -l
remove as novas linhas à direita de cada linha de entrada e adiciona uma nova linha a cada chamada print
. O -n
diz a perl
para ler um arquivo de entrada linha por linha e aplicar o script dado por -e
a cada linha.
Algo parecido com isto
echo Tom=0×1234,Bob=0x4567,rock=0x8912 | perl -E'while(<<>>){print map$_->[1],grep$_->[0]=~/rock/,[split/=/]for split/,/,$_}';
Que compila com warnings
e usa o novo <<>>
, então é um código perl realmente bom.