LINUX.ORG.RU

Замена нескольких строк в html/php файле (регулярка пропуска строки perl)

 ,


1

1

Приветствую! Люди добрые! К сожалению, не могу ответить в теме: поиск и замена нескольких строк в html-файлах

Поэтому решил создать новый топик (не пинайте, плз).

Уже больше суток бьюсь над задачей

Команда SSH: find -name 'shablon.php' -print | xargs perl -pi -e's/11[пропуск строки]22/33/ig'

Никак не хочет работать. Пропуск строки пробовал уже всеми возможными выражениями:

find -name 'shablon.php' -print | xargs perl -pi -e's/11[\s\S]+22/33/ig'

find -name 'shablon.php' -print | xargs perl -pi -e's/11\n22/33/ig'

ну и другие вариации не помогают.

Подскажите, пожалуйста, как правильно сформировать команду поиска в файлах shablon.php: 11 22

и замены на 33?

P.s. find -name 'shablon.php' -print | xargs perl -pi -e's/11/33/ig' - работает замечательно (но это всё в рамках 1 строки. Как только касается дело 2 строк одновременно - возникает такая вот проблема).

Pp.s. искать сначала 11 и менять на 33, потом искать 22 (второй командой) и удалять - не вариант, к сожалению. Нужно именно найти кусок файла (если быть точным, то конкретный <javascript> в HTML коде и удалить его.)



Последнее исправление: pawaxby (всего исправлений: 1)
echo -en "11\n22\n44\n55\n11\n22\n55" | sed '/11/ {N;s/.*/33/g}'

Ну или

sed '/11/ {N;s/11\n22/33/g}'
если нужно именно связку 11 и 12.

Deleted
()

Это потому, что -p заставляет Perl читать файл при помощи оператора <>, т.е. разделяя значением $/, т.е. по одной строке. Perl можно заставить читать файлы полностью:

$ echo '4123412341234 2134 12341234 11


22321 42 34123412341234 123 41 2341234 1234' | perl -p -e'BEGIN{undef$/}' -e's/11\s+22/33/gi'
4123412341234 2134 12341234 33321 42 34123412341234 123 41 2341234 1234

AITap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.