Removendo linhas do arquivo de texto com o Powershell

5

Estou tentando remover linhas específicas de um arquivo de texto. O arquivo de texto é apenas uma lista e eu quero remover entradas específicas se elas estiverem presentes. Então o que eu tenho é isso:

$f=${path_to_file}
for($i = 0; $i -le $f.length; $i++)
{
    if ($f[$i] -eq "text_to_be_deleted")
    {
        $f[$i]=$null
    }
}
${path_to_file}=$f

O problema é que isso está eliminando todos os retornos de carro do arquivo de texto. Eu tentei o seguinte:

(type path_to_file) -notmatch "text_to_be_deleted" | out-file path_to_file

O problema com esse comando é que eu posso ter uma string como "abc", "abcd" ou "abcde". Se eu tiver "abc" entre aspas ", exclui qualquer linha que contenha" abc ", não apenas uma correspondência exata. Eu realmente sou péssimo em expressões regulares, então não consegui descobrir como especificar exatamente essa string.

Alguma sugestão sobre como fazer isso?

    
por Alex 18.02.2011 / 19:18

3 respostas

8

Isso pode ser feito com uma única linha:

(type path_to_file) -notmatch "^text to be deleted$" | out-file path_to_file

Observe que ^ significa "início da linha" e $ significa o final da linha.

    
por 18.02.2011 / 20:44
0

Você tem mais disso.

$f=${path_to_file}
for($i = 0; $i -le $f.length; $i++)
{
    ## If NOT EQUAL to text-to-be-deleted, print to file
    if ($f[$i] -ne "text_to_be_deleted")
    {
        ## write to file, preserving carriage returns.
        out-file -filepath ${path_to_file} -InputObject $f[$i] -append
    }
}

Ele usa o out-file de uma maneira diferente da sua, mas deve preservar os CR's.

    
por 18.02.2011 / 20:37
0

Se você não se importar em usar ferramentas que não sejam do PowerShell:

findstr /V /C:"abcd" file.txt > file_new.txt
    
por 21.02.2011 / 22:15

Tags