Как скопировать только строки кода с определенным словом из файла perl в новый файл

У меня есть файл perl с html-кодом внутри подпрограммы. Я хочу скопировать html-код в новый файл, но ТОЛЬКО html-код, а не остальную часть синтаксиса perl. HTML-код находится внутри одной подпрограммы, и весь HTML-код начинается с "push":

sub getTable {    
    push @htmlBase, qq(<html>\n);
    push @htmlBase, qq(\n);
    push @htmlBase, qq(<head>\n);
    push @htmlBase, qq(<meta http-equiv="Content-Language" content="en-us">\n);

По сути, как мне ТОЛЬКО скопировать строки, начинающиеся с 'push', в новый файл из моего текущего файла perl? Заранее спасибо.

Скопируйте подпрограмму в другой файл и добавьте код для вызова этой подпрограммы и распечатайте два массива. Запустите новый файл.

Borodin 13.09.2018 21:02
0
1
52
2

Ответы 2

Если вы используете unix-подобную ОС, попробуйте использовать grep. Что-то вроде:

$ grep 'push' myfile.pl | grep -Po '(?<=qq\().*(?=\);)' >Newfile.html

Первый grep просто захватывает строки с "push" на них. Второй grep включает режим Perl RE (-P) и возвращает только совпадающие результаты. Запрос состоит из двух частей: (?<=qq\() соответствует "qq (" прямо перед текстом (но не включает его в результат) и (? =);) Ищет последний ");" на линии.

Это не будет соответствовать многострочным кавычкам, и вывод также будет включать escape-символы, такие как \ n для новой строки.

Использование perl для поиска файла:

perl -lne'm/push.+qq\((.+)?(\\n)\);/ && print $1' source.pl > target.html

Для показанного вами вывода подойдет этот однострочный.

Если ваш исходный сценарий более сложен, например многострочные операторы и встроенные переменные, тогда вам нужно будет написать некоторый временный код для вызова getTable, распечатать содержимое @htmlBase, а затем сохранить этот вывод в новый файл.

Другие вопросы по теме