No meu cenário, preciso verificar meu arquivo ( XXX.txt
) para a palavra " SPOT ". Haverá poucas palavras do SPOT no arquivo.
Agora eu preciso de um script para escrever as 2 principais linhas da palavra " SPOT " em um novo texto fino e nomeá-lo como " done.txt
".
EXEMPLO XXX.txt
dfsfs
clip_id HDX
title Setiap hari
type PROMO
end
clip_id HDQ
title Citra
type SPOT
end
clip_id HDX
title Ri
type PROMO
end
clip_id HDX
title sni
type SPOT
então eu preciso escrever " done.txt
" como abaixo.
clip_id HDQ
title Citra
clip_id HDX
title sni
Por favor, informe o script para fazer isso.
Muito Obrigado
.bat
solução CLI pura , você pode começar comparando a saída dofindstr /n /i "spot" "xxx.txt"
comando e fromfindstr /n /R $ "xxx.txt"
e, em seguida, tratá-la em doisFOR /F
comandos de loop aninhado . Sinta-se à vontade para retornar aqui e editar sua pergunta seguindo a dica de comentário do @DavidPostill.Respostas:
Aqui está a solução em Powershell, sucessor de cmd da Microsoft:
fonte
Eu recomendo o JREPL.BAT - um utilitário JScript / lote híbrido que executa a substituição de texto de expressão regular . O JREPL.BAT é um script puro que roda nativamente em qualquer plataforma Windows a partir do XP.
Supondo que o JREPL.BAT esteja no seu diretório atual, ou melhor ainda, em algum lugar do seu PATH, um simples liner de linha de comando resolverá o problema com eficiência:
/M
opção de múltiplas linhas permite pesquisas em novas linhas./JMatch
opção imprime apenas as cadeias de substituição para correspondênciasComo JREPL é um script em lote, você deve usar CALL JREPL se usá-lo em outro script.
A documentação completa está disponível na linha de comando usando
jrepl /?
. Você pode usarjrepl /?|more
para ver a ajuda uma página de cada vez. Eu nunca uso MAIS porque minha janela do console do cmd.exe está configurada com um buffer de saída grande que me permite rolar para cima para ver a saída anterior.fonte
)
no final do comando JREPL que faz com que ele falhe. Além disso, você deve colocar CALL antes de JREPL se quiser que o script continue - caso contrário, seu comando PAUSE não será acionado.