Como faço para copiar uma palavra / número específico de um arquivo TXT usando o Lote?

1

Eu preciso procurar por 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 eu quero copiar os números que entre yyy e rr, xxx e rr, zzz rr. Então eu quero ecoar esses números. É possível?

782453
fonte
Tente perguntar isso em stackoverflow.com
juniorRubyist

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

De 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 com 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')}"
CBHacking
fonte
0

No Linux você pode usar gawk comando. 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]}';
Eduardo Ramos
fonte
Isso não é útil, pois ele está usando o Windows.
juniorRubyist
Não é ideal, mas pode ser portátil para o Cygwin.
bertieb
Há várias portas gawk para windows. Eu tenho um que faz parte do GOW kit de ferramentas instalado na minha máquina
Journeyman Geek