2017-11-02 19 views
0

Ich habe versucht, die folgenden mit SED zu erreichen, aber da SED Linie Ich habe Angst beruht werde ich nicht in der Lage sein, es zu tun:mehrere Zeilen in awk Ersetzen (oder etwas)

sed -ri 's/(<li>\n\s+<a href="#introduction")/<li><div class="toc-group">Topics<\/div><\/li>\1/' index.php 

Dies ist angeblich t Änderung dieses:

  <li> 
     <a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a> 

in diesen

<li><div class="toc-group">Topics<\/div></li><li> 
     <a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a> 

im Grunde eines armer Mann 'eine Linie in einem bestimmten Ort hinzufügen'. Leider funktioniert \n nicht wie erwartet. Ich denke, AWK kann das, aber SED ist das einzige Werkzeug, das ich jemals benutzt habe und ich weiß nichts über AWK, also kann mir bitte mit einer Lösung helfen.

FYI Es gibt mehr als ein Element, das in verschiedenen Teilen des Dokuments hinzugefügt werden muss, also brauche ich eine Lösung, die es mir erlaubt, einen Teil eines Codes auszuwählen und dann davor zu stellen. Es wird in einem Bash-Skript für die Automatisierung verwendet.

+3

[kann HTML mit Regex nicht übereinstimmen] (https://Stackoverflow.com/a/1732454/7552) –

+0

HTML mit sed zu analysieren ist eine sehr schlechte Idee. Fügen Sie weitere Kontextdaten hinzu (übergeordnete Knoten für Ihre aktuellen Knoten) – RomanPerekhrest

Antwort

1

Wie wäre es ein Perl-Einzeiler:

perl -0777 -ne 's/(<li>\n\s+<a href="#introduction")/<li><div class="toc-group">Topics<\/div><\/li>$1/; print' inputfile 

Ausgang:

 <li><div class="toc-group">Topics</div></li><li> 
    <a href="#introduction" class="toc-h1 toc-link" data-title="Introduction">Introduction</a> 
+0

Vielen Dank für die Bereitstellung der Lösung statt zu predigen :) – RandomWhiteTrash

0

Ich habe nur zu lernen, sed und awk aber diese Syntax erscheint hinzufügen Linie zwischen Text gestartet.

sed 's/<li>/<li><div class="toc-group">\n/g' x.txt 

Ausgang:

<li><div class="toc-group"> 
<a href="#introduction" class="toc-h1 toc-link" data- 
title="Introduction">Introduction</a> 

ich nur einen Teil Ihrer index.php gesetzt haben Länge des Beispiels zu reduzieren. Die Ausgabe hier zeigt eine Aufteilung der a href = ... Zeile, aber es ist eine Zeile, wenn ich das Skript ausführe, also ist es nur ein Bearbeitungsproblem in diesem Beitrag.

Verwandte Themen