Как запустить список регулярных выражений Perl из файла в терминале - PullRequest
0 голосов
/ 21 января 2019

Я довольно новичок во всей игре по кодированию и очень благодарен за каждый ответ!

Я работаю над каталогом со многими .txt файлами в них, и у меня есть файл с длинным спискомнапример, "perl -p -i -e 's/\n\n/\n/g' *.xml" они все работают, если я копирую их в терминал.Но есть ли возможность запустить их прямо из файла?Я попытался ./unicode.sh, но это привело к:

Нет такого файла или каталога.

Есть идеи?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вот (в основном) эквивалентный Perl-скрипт для oneliner perl -p -i -e 's/\n\n/\n/g' *.xml (главное отличие состоит в том, что для него включены strict и warnings, что настоятельно рекомендуется ), который можно расширить, добавив больше кода для изменения текущей строки в теле цикла while.

#!/usr/bin/env perl
use warnings;
use strict;

if (!@ARGV) {               # if no files on command line
    @ARGV = glob('*.xml');  # get a default list of files
}
local $^I = '';             # enable inplace editing (like perl -i)
while (<>) {                # read each line of each file into $_
    s/\n\n/\n/g;            # modify $_ with a regex
    # more regexes here...
    print;                  # write the line $_ back out
}

Вы можете сохранить этот скрипт в файле, таком как process.pl, а затем запустить его с помощью perl process.pl или выполнить chmod u+x process.pl, а затем запустить его с помощью ./process.pl.

С другой стороны, вы действительно не должны изменять файлы XML с помощью регулярных выражений , существует множество модулей Perl для обработки XML - я писал об этом еще здесь, Кроме того, в примере, который вы показали, s/\n\n/\n/g фактически не будет иметь никакого эффекта, так как при построчном чтении файлов ни одна строка не будет содержать два \n (вы можете изменить способ чтения файлов Perl, но я не вижу упоминания об этом в вопросе).

Редактировать: Вы назвали сценарий в своем примере unicode.sh - если вы обрабатываете файлы Unicode, то Perl имеет очень мощные функции, чтобы помочь с этим, хотя код не обязательно в конечном итоге так же красиво и коротко, как я показал выше Вам нужно будет рассказать нам больше о том, что вы делаете, и показать несколько примеров ввода и вывода, чтобы получить предложения по этому поводу. Смотрите также, например, perlunitut.

0 голосов
/ 21 января 2019

Вероятно, если у вас нет такого файла или каталога, ваша проблема заключалась в том, что вы забыли сделать unicode.sh исполняемым, как в chmod +x unicode.sh, предполагая, что это сценарий, который вы написали.

Конечно, нормальный способ запуска нескольких команд Perl - это то, что выглядит как runme.pl, который вы пишете, то есть скрипт Perl.

Тем не менее, да, все будет работать с терминала, вам просто нужно быть осторожным, избегая того, что bash выполняет.

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