Portanto, tenho vários arquivos de texto grandes que preciso classificar e remover todas as ocorrências de linhas que contêm uma determinada palavra-chave. Então, basicamente, se eu tiver essas linhas:
Isso não é um teste
Isso é um teste
Talvez um teste
Definitivamente não é um teste
E eu executo o script com 'not', preciso excluir totalmente as linhas 1 e 4.
Eu tenho tentado com:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
mas apenas substitui o 'Programa' e não a linha inteira.
windows-7
powershell
script
karel
fonte
fonte
Set-Content
? Não acredito queSet-Content
seja um substituto para o drop-inOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Out-File é basicamente Set-Content, mas executa a entrada através da formatação padrão em vez da simples conversão de string.Isso funcionará:
fonte
Você também pode usar 'Select-String' com a opção -notmatch:
fonte
Eu só precisava fazer isso funcionar e vi o seguinte:
A chave é que o 'Where-Object' usando um bloco de script (conforme indicado pelas chaves) requer a declaração da variável em um evento de criação de bloco de script, portanto, o
linha.
Ao estruturá-la dessa maneira, é possível criar uma função, passar uma string de texto para corresponder parcialmente, executar a criação do bloco de scripts com o valor passado e fazer com que funcione corretamente.
As respostas acima não explicam corretamente como passar o valor a ser substituído dentro de uma variável.
fonte