Дистрибутив Linux для начинающего пользователя Windows 7 с хорошей совместимостью [закрыто]

Я не уверен, почему Perl здесь неприемлем. На предоставленных вами входных данных эта строка дает результат, который вы запрашивали:

perl -0777p -e 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg' irc.txt

Аргумент -e - это в точности первый аргумент вашего magicregextool , за исключением того, что я добавил / mg модификатор регулярного выражения. Это не может быть «неизменным», но и не кажется необоснованным. Если вы не хотите вводить всю строку, как насчет этого сценария как magicregextool :

#!/usr/bin/perl -0777p
BEGIN { $::arg = shift @ARGV; }
eval $arg;

Или даже:

#!/bin/sh
perl -0777pe $*

Затем вы просто набираете:

magicregextool 's/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg' irc.txt

Это то же самое, что и ваш образец (опять же, кроме добавления модификатора / mg ).

Дополнительным преимуществом этого является то, что если вы выполняете несколько связанных операций поиска / замены для каждого файла, вы можете объединить их в один сценарий:

#!/usr/bin/perl -0777p
s/.* > (.*) joined the channel\.\n(((?!.* \1 (was kicked from channel\.|was banned from channel\.)\n).*\n)+?.*\1 disconnected)/\2/mg;
s/(some other\n)matched text/\1/mg;
-1
14.04.2019, 11:24
0 ответов

Теги

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