Regular Expressions nur in einer bestimmten Zeile?
Hallo zusammen,
wie bewerkstellige ich mit ReGex, dass ein bestimmter Suchbegriff nur in einer bestimmten Zeile ersetzt wird? Ich habe mehrere Dateien, in denen in Zeile 5
==HalloTest==
oder ähnliches auftaucht.
Begriffe wie ==HalloTest== tauchen jedoch auch an weiteren Stellen bzw. Zeilen auf, ich möchte jedoch nur die eingangs erwähnte Zeile ändern, an anderer Stelle nichts.
Wie kann ich das bewerkstelligen?
Vielen Dank im Voraus!
3 Antworten
Ein regulärer Ausduck passt oder passt nicht. Das ist völlig unabhängig vom Wetter oder der Zeilennummer, in der der Text steht.
Wenn Du nur bestimmte Vorkommen ersetzen willst, musst Du das dem Ersetzungsbefehl mitteilen. Bei sed schreibst Du einfach die Zeilennummer vor den Befehl:
sed -i '5s/==HalloTest==/== Zeile 5 ==/' tests/*.wiki
Ansonsten kannst Du bestenfalls versuchen, das Pattern so einzuschränken, dass es nur noch in Zeile 5 passt. Gibt es irgend etwas, was nur in Zeile 5 (nicht) vorkommt?
Ich würde für alle Dateien ex in einem Skript aufrufen und dann eben nur für 5,5 ändern.
Indem Du es nur auf Zeile 5 anwendest.
Ich bin davon ausgegangen, Du programmierst.
Wenn in Zeile 5 etwas steht, das auch wirklich nur dort steht, dann kannst Du das mit in das Regex Pattern einbauen, sodass es nur auf Zeile 5 matcht.
Gibt's das nicht, kommst Du nicht ums Programmieren herum. Erkundige dich, wie man mit PowerShell eine bestimmte Zeile liest und schreibt. PowerShell kann ziemlich viel, auch Regex, ein bisschen Einarbeitung wirst Du aber brauchen.
Aber wie genau? Bei mehreren tausend Dateien möchte ich nicht jede einzeln öffnen.
Eigentlich geht es auch nur um das herkömmliche Programmieren, sondern in MediaWiki, wo jedoch die gleichen ReGex-Ausdrücke verwendet werden können, wie in Notepad u.ä. auch.