Question Supprimer des lignes d'un fichier texte avec Powershell


J'essaie de supprimer des lignes spécifiques d'un fichier texte. Le fichier texte est juste une liste et je veux supprimer des entrées spécifiques si elles sont présentes. Donc ce que j'ai est ceci:

$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

Le problème est que cela supprime tous les retours chariot du fichier texte. J'ai essayé ce qui suit:

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

Le problème avec cette commande est que je peux avoir une chaîne telle que "abc", "abcd" ou "abcde". Si j'ai "abc" dans les guillemets ", cela supprime toute ligne contenant" abc ", pas seulement une correspondance exacte. Je crains vraiment les expressions régulières, je ne peux donc pas comprendre comment spécifier exactement cette chaîne.

Des suggestions sur la façon de faire ceci?


5
2018-02-18 18:18


origine




Réponses:


Ceci peut être accompli avec un one-liner:

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

Notez que le ^ signifie 'début de la ligne' et le $ signifie la fin de la ligne.


8
2018-02-18 19:44



Notez que vous voudrez peut-être spécifier un encodage pour Out-File au cas où certains programmes s'étoufferaient sur UTF-16. - Joey


Vous en avez l'essentiel.

$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
    }
}

Il utilise le fichier externe d'une manière différente de celle que vous utilisez, mais il devrait conserver les CR.


0
2018-02-18 19:37





Si cela ne vous dérange pas d'utiliser des outils autres que PowerShell:

findstr /V /C:"abcd" file.txt > file_new.txt

0
2018-02-21 21:15