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?


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')}"

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]}';

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.