Fügen Sie eine hinzu <h1> Tag von Dateiname unter Linux </h1>

482
To Do

Ich habe einen Ordner mit einer Reihe von HTML-Dateien und möchte ein

<h1>Filename without extension</h1>

Zeile direkt nach dem <body>Tag.

Wie könnte ich das machen, wenn ich ein Skript oder einen Einzeiler hätte

  1. Gehen Sie die einzelnen Dateien im Ordner durch
  2. Erstellen Sie das H1-Tag basierend auf dem Dateinamen der Datei, jedoch ohne die Erweiterung (Beispiel: Die Datei namens file foobar.htmlerhielt eine <h1>foobar</h1>Zeile nach der <body>Zeile
  3. Überschreiben Sie die Dateien

?

0
Welche Sprache / Werkzeug verwenden Sie? Gibt es einige Parameter im `` Tag? Könnten Sie einige Auszüge von Dateien und das erwartete Ergebnis zeigen? Toto vor 6 Jahren 0
Einige Body-Tags in einigen Dateien enthalten anderen Text, wie lang = usw. Das Body-Tag wird in jeder Datei einmal angezeigt. To Do vor 6 Jahren 0

1 Antwort auf die Frage

0
Toto

Hier ist ein kleines Perl-Skript, das die Aufgabe erfüllt:

#!/usr/bin/perl use strict; use warnings;  # Retrieve all html files in an array my @files = glob '*.html'; # "slurp" mode undef $/; # loop over all files for my $file(@files) { # open file in read mode open my $fhi, '<', $file or die "Can't open '$file' for reading: $!"; # retrieve content in a single string my $content = <$fhi>; close $fhi; # remove extension (my $without_ext = $file) =~ s/\.[^.]+$//; #/this is a comment for syntaxic color! # add h1 tag with filename $content =~ s~<body[^>]*>~$&\n<h1>$without_ext</h1>~s; # open same file in write mode open my $fho, '>', $file or die "Can't open '$file' for writing: $!"; # write the modified string in the file print $fho $content; } 
Dies würde jeweils eine Datei bearbeiten. Ich habe mein Ziel in der ursprünglichen Frage klargestellt. To Do vor 6 Jahren 0
@ToDo: Sorry, es war nur ein Test., Siehe meine Bearbeitung, es funktioniert für alle HTML-Dateien in einem Verzeichnis Toto vor 6 Jahren 0
Würde dies nicht die H1-Zeile auf "Titel" setzen? Ich möchte mit dem Dateinamen ohne .html identisch sein To Do vor 6 Jahren 0
@ToDo: Gib mir eine Minute :) Toto vor 6 Jahren 0
Ich habe das Skript im selben Ordner wie die HTML-Dateien gespeichert und ausgeführt, aber es scheint nichts zu passieren. Das Skript ist sofort vorhanden. To Do vor 6 Jahren 0
@ToDo: Hast du eine Fehlermeldung? Was ist das Ergebnis von "perl -v"? Was ist die Ausgabe, wenn Sie `print" $ _ \ n ";` gleich nach `für (@files) {` hinzufügen? Toto vor 6 Jahren 0
Dies ist Perl 5, Version 26, Subversion 2 (v5.26.2), das für x86_64-linux-thread-multi erstellt wurde. Wenn ich `print" $ _ \ n "hinzufüge;` bekomme ich die Liste der Dateien im Ordner. To Do vor 6 Jahren 0
@ToDo: Es sollte funktionieren. Sind Ihre Dateien ordnungsgemäß berechtigt (lesen / schreiben)? Ändern Sie die offene Anweisung wie ich. Toto vor 6 Jahren 0
Das Skript hat etwas funktioniert, aber es gibt zwei Probleme. 1. Anstatt nach dem BODY-Tag ein H1-Element hinzuzufügen, kopierte das Skript den gesamten Text in der Datei und fügte am Ende des ersten Textes eine zweite Kopie mit dem H1-Tag unter dem Body-Tag hinzu. 2. Die Dateierweiterung wird nicht entfernt (dies ist ein geringfügiges Problem, das ich umgehen kann). To Do vor 6 Jahren 0
@ToDo: Sorry, ich habe nicht sorgfältig getestet. Jetzt klappt das gut;) Toto vor 6 Jahren 0