2017-02-15 1 views
0

Im KurzenWie schnell eine Linie zu allen HTML-Dateien nach einer Zeile mit einem String angegeben hinzufügen

Gibt es eine Möglichkeit Kommandozeile bash: echo "***some code***" >> "***all files of some type***" direkt nach der Zeile in den Dateien, die eine bestimmte Zeichenfolge enthält wie <body?

In Lange

Ich habe Google Analytics zu einer Site hinzuzufügen. Es hat ein Archiv von Zeug, das um ein paar Jahre geht.

Für einige aktuelle archivierten Jahren habe ich gerade hinzugefügt:

... 
</head> 
<body<?php if ($onpageload != "") { echo " onload=\"$onpageload\""; }?>> 
<?php include_once("analyticstracking.php") ?> 
... 

in die common_header.php Datei

Für einige der frühen Sachen, die sie nicht common_header.php Datei gemacht hat. Also, für die Ordner, die Jahre zu verwalten, die keinen gemeinsamen Header gibt es eine Menge von HTML-Dateien, die diese Zeile benötigen:

<?php include_once("analyticstracking.php") ?>

Gibt es eine Möglichkeit Befehlszeile bash: echo "<?php include_once("analyticstracking.php") ?>" >> "*.html" direkt nach dem in dem Datei, die eine bestimmte Zeichenfolge wie <body

enthält

Die Website wird mit PHP, Python und HTML verwaltet (mit einigen Javascript CSS usw.).

Ich bin auf Ubuntu. Auch Hinweis Ich bin neuer auf dieser Art von Webseite, wenn meine Frage irgendwie eine falsche oder eine dumme Frage ist, lassen Sie es mich bitte wissen.

Antwort

2

Wenn Sie zum Beispiel, wollen eine Linie vor die Linie </body> enthält hinzufügen, Bearbeitung aller Dateien vorhanden ist, können Sie

sed -i -e '\@</body>@i\New stuff' *.html 

die gleiche, aber nach die Leitungsanpassung <!-- insert here -->

sed -i -e '/<!-- insert here -->/a\New stuff' *.html 

Es ist ziemlich umständlich, mehrere Zeilen in sed mit einem s Befehl zu überspannen. Die zeilenorientierten Befehle sind i\ (vorher einfügen) und a\ (einfügen nach).

Ihre speziellen Fall würde

sed -i -e '/<body/a\<?php include_once("analyticstracking.php") ?>' *.html 

sein, aber nur, wenn Ihr body-Tag nicht über Attribute mehrere Zeilen hinweg. Es ist immer problematisch, html/xml Dateien mit Textwerkzeugen zu bearbeiten, die ihre Struktur nicht kennen, aber es kann funktionieren, wenn Sie den tatsächlichen Text in den Dateien, die Sie bearbeiten, sicher sind.

1

Wenn Sie Bash suchen, dann würde ich empfehlen sed -e 's/<body/<body <blabla>/g' [html FILE]. Wenn der Dateiinhalt <body> ist, dann wäre der Ausgang <body <blabla>>. Sie ersetzen nur blabla mit PHP-Code. Syntax ist wie

sed -e 's/[search]/[replace]/g' [file name]

wo -e ‚erweitert‘ ist Fahne und g Ich denke, dass für ‚nach dem ersten Spiel Rückkehr‘ steht, aber ich bin nicht sicher, so dass Sie auch fallen lassen können.

Und über viele Dateien hier, wie Sie es tun: Change multiple files

+0

Danke, das ist mir viel näher, ich werde die Antwort akzeptieren sobald ich es funktioniert habe und kann die komplette Arbeitslinie kommentieren – Rorschach

Verwandte Themen