Добавить <h1> тег из имени файла в Linux </h1>

351
To Do

У меня есть папка с кучей HTML-файлов, и я хочу добавить

<h1>Filename without extension</h1>

строка сразу после <body>тега.

Как я мог иметь сценарий или однострочник, который бы

  1. Просмотреть каждый файл в папке
  2. Создайте тег H1 на основе имени файла файла, но без расширения (пример: файл с именем foobar.htmlполучил <h1>foobar</h1>строку после <body>строки
  3. Перезаписать файлы

?

0
Какой язык / инструмент вы используете? Есть ли какие-нибудь параметры в теге ``? Не могли бы вы показать некоторые выдержки из файлов и ожидаемый результат? Toto 5 лет назад 0
Некоторые теги тела в некоторых файлах содержат другой текст, например lang = и т. Д. Тег тела появляется в каждом файле один раз. To Do 5 лет назад 0

1 ответ на вопрос

0
Toto

Вот небольшой скрипт на Perl, который делает эту работу:

#!/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; } 
Это будет работать по одному файлу за раз. Я уточнил свою цель в первоначальном вопросе. To Do 5 лет назад 0
@ ToDo: Извините, это был всего лишь тест. Посмотрите мое редактирование, оно работает для всех html-файлов в каталоге Toto 5 лет назад 0
Разве это не установит строку H1 в «заголовок»? Я хочу быть идентичным имени файла без .html To Do 5 лет назад 0
@ ToDo: дай мне минуту :) Toto 5 лет назад 0
Я сохранил скрипт в той же папке, что и HTML-файлы, и запустил его, но, похоже, ничего не произошло. Сценарий существует сразу. To Do 5 лет назад 0
@ToDo: у вас есть сообщение об ошибке? Каков результат `perl -v`? Что будет с выходом, если вы добавите `print" $ _ \ n ";` сразу после `for (@files) {`? Toto 5 лет назад 0
Это Perl 5, версия 26, Subversion 2 (v5.26.2), созданная для x86_64-linux-thread-multi. Если я добавлю `print" $ _ \ n ";` я получу список файлов в папке. To Do 5 лет назад 0
@ToDo: это должно работать. Правильно ли разрешены ваши файлы (для чтения / записи)? Измените инструкцию открытия, как я сделал. Toto 5 лет назад 0
Сценарий несколько работал, но есть две проблемы. 1. Вместо добавления H1 после тега BODY, скрипт скопировал весь текст в файле и добавил вторую копию в конце первого с тегом H1 под тегом body. 2. Расширение файла не удалено (это небольшая проблема, которую я могу обойти). To Do 5 лет назад 0
@ ToDo: Извините, я не проверял тщательно. Теперь работает нормально;) Toto 5 лет назад 0

Похожие вопросы