Как скопировать только строки кода с определенным словом из файла perl в новый файл - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть файл 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-файла? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

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

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

Для вывода, который вы показали, этот однострочный будет работать.

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

0 голосов
/ 13 сентября 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...