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.