Como copio uma palavra / número específico de um arquivo TXT usando o Batch?

1

Eu preciso procurar um número específico que vem depois de uma string em um arquivo de texto. Por exemplo, eu tenho esses dados:

yyy = 80rr, xxx = 136rr, zzz = 95rr    

e desejo copiar os números entre yyy e rr , xxx e rr , zzz rr . Então eu quero repetir esses números. É possível?

    
por 782453 28.01.2015 / 14:11

2 respostas

1

Sua melhor aposta, usando apenas ferramentas do Windows, é provavelmente o Powershell. One-liner: No PS já:

$(sls '[0-9]+' filename.txt -allm).Matches.Value

Do CMD.EXE:

powershell -c "$(sls '[0-9]+' test.txt -allm).Matches.Value"

Para um arquivo de texto (chamado filename.txt ) contendo apenas sua linha, isso imprime o seguinte:

80
136
95

Eu testei em arquivos com várias linhas e vários números por linha, e ainda funciona, imprimindo cada número em sua própria linha. Agora, se você tiver outros números no arquivo que não deseja ecoar, eles também serão ecoados. Para evitar isso, podemos combinar apenas números que terminam em rr :

$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}

ou

powershell -c "$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}"
    
por 23.09.2015 / 09:16
0

No Linux, você pode usar o comando gawk . Eu fiz assim:

    echo "yyy = 80rr, xxx = 136rr, zzz = 95rr" | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';

O resultado foi:

    80 136 95

No seu caso:

    cat file.txt | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';
    
por 28.01.2015 / 17:09