none
Mehrere Zeilen einer .txt-Datei löschen RRS feed

  • Frage

  • Liebe Community,

    ich muss euch leider schon wieder mit einem Anfänger-Problem belästigen!

    Ich habe hier eine Textdatei, die früher mal eine HTML-Datei war.

    Jetzt versuche ich die ganzen "Tags" zu entfernen. An sich funktioniert das super mit -replace.

    Jetzt will ich jedoch das gesamte <head>-Tag löschen und das erstreckt sich leider über mehrere Zeilen.

    Der Header sieht so aus:

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta ID="">
        <link rel="stylesheet" type="text/css" href="http://blabla.css">        
        <link href="http://blabla.css" rel="stylesheet">
        <script src="http://blabla.js"></script>
        <script src="http://blabla.js"></script>
        <title>Produktdetailanzeige:  Etikettendrucker -</title> 
      </head>

    Ich will das natürlich bei vielen vielen Dokumenten machen und die haben nicht alle den gleichen Header...

    Es wäre am geschicktesten, wenn man zum Beispiel sagen könnte:

    Wenn du "<head>" liest, dann lösche alles, bis du "</head>" liest.

    Ist das möglich? :)

    Ich hoffe, Ihr könnt mir weiterhelfen.

    Dienstag, 12. Juli 2016 13:43

Antworten

  • Genau,

    Get-Content liest Zeile für Zeile.

    $a = [IO.File]::ReadAllText("C:\Test\Test.txt")
    
    $b = $a -replace '(?ms)<head(.*?)head>',''

    Das müsste klappen


    • Bearbeitet psott Mittwoch, 13. Juli 2016 08:38
    • Als Antwort markiert mk-vsh Mittwoch, 13. Juli 2016 08:46
    Mittwoch, 13. Juli 2016 08:37

Alle Antworten

  • Moin,

    da musst du mir regex ran. Sieht im ersten Moment furchtbar verwirrend aus, wenn man es versteht, ist es aber sehr nützlich.

    $a = '
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta ID="">
        <link rel="stylesheet" type="text/css" href="http://blabla.css">        
        <link href="http://blabla.css" rel="stylesheet">
        <script src="http://blabla.js"></script>
        <script src="http://blabla.js"></script>
        <title>Produktdetailanzeige:  Etikettendrucker -</title> 
    </head>
    
    Restlicher Text'
    
    $a -replace '(?ms)<head(.*?)head>',''

    Dienstag, 12. Juli 2016 15:33
  • An sich müsste das natürlich funktionieren (tut es ja im kleinen auch).

    Das Problem ist jetzt, dass ich ja das Dokument mit "Get-Content 'C:\Test\Test.txt'" einlese.

    Scheinbar erkennt er hierbei aber nur jeweils eine Zeile des Textdokumentes.

    $a = Get-Content 'C:\Test\Test.txt'
    
    $a = $a -replace '(?ms)<head(.*?)head>',''

    Da ersetzt er mir einfach gar nichts damit, wenn ich mir dann $a anzeigen lasse.

    Mittwoch, 13. Juli 2016 06:58
  • Genau,

    Get-Content liest Zeile für Zeile.

    $a = [IO.File]::ReadAllText("C:\Test\Test.txt")
    
    $b = $a -replace '(?ms)<head(.*?)head>',''

    Das müsste klappen


    • Bearbeitet psott Mittwoch, 13. Juli 2016 08:38
    • Als Antwort markiert mk-vsh Mittwoch, 13. Juli 2016 08:46
    Mittwoch, 13. Juli 2016 08:37
  • Juhuuu :) Das funktioniert! Vielen vielen vielen lieben Dank :)
    Mittwoch, 13. Juli 2016 08:46
  • Hallo,

    das geht auch mit Get-Content den Text "im Ganzen" zu lesen, ich glaube ab der Version 3.0

    $a = Get-Content -ReadCount 0 -Raw .\test.txt
    # oder kuerzer
    $a = Get-Content -Raw .\test.txt


    Beste Gruesse
    brima


    • Bearbeitet brima Mittwoch, 13. Juli 2016 20:30
    Mittwoch, 13. Juli 2016 20:26