Perl regex для работы с файлом из командной строки - PullRequest
7 голосов
/ 05 декабря 2010

В файле, скажем, xyz.txt, я хочу заменить шаблон любого числа следующим точечным примером: 1., 2., 10., 11.и т.д .. с пробелами.Как составить команду perl в командной строке для действия над файлом, чтобы выполнить описанное выше, каким должно быть регулярное выражение?

Пожалуйста, помогите Спасибо.

Ответы [ 3 ]

22 голосов
/ 06 декабря 2010

Это ДОЛЖНО быть Perl oneliner?

perl -i -pe  's/\d+\./ /g' <fileName>

Параметры командной строки Perl: -i используется для указания того, что происходит с входным файлом. Если вы не дадите ему расширение файла, исходный файл будет утерян и заменен на выходной файл Perl. Например, если бы я имел это:

perl -i.bak -pe  's/\d+\./ /g' <fileName>

Исходный файл будет храниться с суффиксом .bak, а будет содержать ваш вывод.

-p означает заключить вашу Perl-программу в цикл печати, который выглядит SOMEWHAT следующим образом:

while ($_ = <>) {
    <Your Perl one liner>
    print "$_";
}

Это несколько упрощенное объяснение того, что происходит. Вы можете увидеть фактический цикл perl, выполнив команду perldoc perlrun из командной строки. Основная идея заключается в том, что он позволяет вам работать с каждой строкой файла, как sed или awk.

-e просто содержит вашу команду Perl.

Вы также можете выполнить перенаправление файлов:

perl -pe  's/\d+\./ /g' < xyz.txt > xyz.txt.out
4 голосов
/ 05 декабря 2010

Ответ (не проверен):

perl -ipe "s/\d+\./ /g" xyz.txt
1 голос
/ 06 декабря 2010

Оба

perl -ipe "s/\d+\./ /g" xyz.txt

и

perl -pie

не может выполняться в моей системе.

Я использую следующий порядок:

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