Страница 1 из 1

perl регулярка для многострочной замены

Добавлено: 2014-07-24 14:02:11
time12345
Люди добрррррые подскажите, вот например нужно мне с командной строки произвести замену

куда тут m правильно влепить? вместо s что-то не работает

Код: Выделить всё

perl -e 's/\sometextatbegin(.){1,1000}sometext(.){1,1000}sometextatend//mg' -pi $1
Как сделать так чтобы оно в (.) переводы строки тоже всчитывало?

Re: perl регулярка для многострочной замены

Добавлено: 2014-10-16 21:26:16
Alex Keda
я даже не понимаю что оно делает =))

Re: perl регулярка для многострочной замены

Добавлено: 2014-10-16 21:28:56
Bayerische
Типа sed, думаю.

Re: perl регулярка для многострочной замены

Добавлено: 2014-11-19 20:58:36
zg
time12345 писал(а):Как сделать так чтобы оно в (.) переводы строки тоже всчитывало?
Тут шаблон нужен типа такого [\s\S]+ В подмножесто точки не входит перевод строки.

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-01 18:09:55
time12345
а вы попробуйте. у вас работает? у меня ничего не помогало.

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-02 19:29:45
zg
time12345 писал(а):а вы попробуйте. у вас работает? у меня ничего не помогало.
у меня работает

Код: Выделить всё

#!/usr/bin/perl -w

$string = "hello
world";

if ( $string =~ /([\s\S]+)/ )
{
    print $1, "\n";
} 

Код: Выделить всё

% ./1.pl
hello
world

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-06 19:35:17
time12345
нееееееееет, вы именно создайте отдельный текстовый файл многострочный и попробуйте перлом в нём произвести замену с командной строки.

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-08 19:51:19
zg
честно говоря не понимаю, почему тут нужно использовать именно перл, но пжалста, всё работает:

Код: Выделить всё

home% echo -e "1\n2\n2.5\n3" | perl -np0e 's/(1)[\s]+(3)/$1foo$2/' 
1
2
2.5
3
home% echo -e "1\n2\n2.5\n3" | perl -np0e 's/(1)[\S]+(3)/$1foo$2/'
1
2
2.5
3
home% echo -e "1\n2\n2.5\n3" | perl -np0e 's/(1)[\s\S]+(3)/$1foo$2/'
1foo3
как я и писал
zg писал(а):Тут шаблон нужен типа такого [\s\S]+

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-16 20:22:37
time12345
а что, у вас есть варианты попроще перла?

вы попробуйте именно способом как в первом посте, создайте заранее файл file.txe и произведите в нём замену...

file.txt

Код: Выделить всё

sometextatbegin
asdfasdf asdfads fsdaf ads fdafs 
sometextatend

asd fasd fdsa fsdaaasdfadsfdasfsdafadsdasfdasfdsafdas fdasfdas fdas fdasf 
вот здесь, например, нужно

Код: Выделить всё

sometextatbegin
asdfasdf asdfads fsdaf ads fdafs 
sometextatend
заменить на пустую строку

я так понял вы предлагаете такой вариант

Код: Выделить всё

perl -e 's/\sometextatbegin([\s\S.]){1,1000}sometextatend//mg' -pi file.txt
но будет ли он работать?)) проверьте))

Re: perl регулярка для многострочной замены

Добавлено: 2014-12-22 19:07:50
zg
time12345 писал(а):а что, у вас есть варианты попроще перла?
конечно есть

Код: Выделить всё

home% cat 1.txt                                         
sometextatbegin
asdfasdf asdfads fsdaf ads fdafs
sometextatend

asd fasd fdsa fsdaaasdfadsfdasfsdafadsdasfdasfdsafdas fdasfdas fdas fdasf 
home% sed -z 's/sometextatbegin.*sometextatend//g' 1.txt


asd fasd fdsa fsdaaasdfadsfdasfsdafadsdasfdasfdsafdas fdasfdas fdas fdasf 
home% 
time12345 писал(а):вы попробуйте именно способом как в первом посте
sed тоже умеет делать замены в файлах и бэкапы.
time12345 писал(а):но будет ли он работать?)) проверьте))
у меня будет.