Использование Grep, Sed [проблемы решены] (:))
Модератор: Модераторы разделов
-
- Сообщения: 8
Использование Grep, Sed [проблемы решены]
Здравствуйте.
Есть множество файлов.
В них есть кусок текста\кода, ограниченный <!-- ad --> и <!-- /ad -->.
Мне надо его удалить.
Делаю так:
find . -name "*.php" | grep ad - выдает кучу ненужного мусора.
find . -name "*.php" | grep " ad " - не выдает ничего.
Подскажите, как составить команду, чтобы найти все файлы, содержащие <!-- ad --> (или <!-- /ad -->).
Заранее спасибо.
Есть множество файлов.
В них есть кусок текста\кода, ограниченный <!-- ad --> и <!-- /ad -->.
Мне надо его удалить.
Делаю так:
find . -name "*.php" | grep ad - выдает кучу ненужного мусора.
find . -name "*.php" | grep " ad " - не выдает ничего.
Подскажите, как составить команду, чтобы найти все файлы, содержащие <!-- ad --> (или <!-- /ad -->).
Заранее спасибо.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
Первая конструкция:
[******@web17 ~/********.nichost.ru/docs]$ find . -name "*.php" | grep -LirE '<!-- \/?ad -->'
(standard input)
Вторая:
[******@web17 ~/********.nichost.ru/docs]$ find . -name "*.php" | grep -irE '<!-- \/?ad -->'
Безуспешно.
Мне достаточно было бы даже поиска по "<!--" или "-->".
[******@web17 ~/********.nichost.ru/docs]$ find . -name "*.php" | grep -LirE '<!-- \/?ad -->'
(standard input)
Вторая:
[******@web17 ~/********.nichost.ru/docs]$ find . -name "*.php" | grep -irE '<!-- \/?ad -->'
Безуспешно.
Мне достаточно было бы даже поиска по "<!--" или "-->".
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Использование Grep, Sed [проблемы решены]
find не нужно писать :)
просто скопируй то что я написал и запусти.
просто скопируй то что я написал и запусти.
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
В таком случае, оболочка как будто ждёт ввода - курсор в начале новой строки.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
**Стыдится
Спасибо, diesel, большое
Думаю теперь, имея список файлов, я смогу скриптом вырезать найденные конструкции и то, что между ними. Если не справлюсь, то отпишу.
Спасибо, diesel, большое

Думаю теперь, имея список файлов, я смогу скриптом вырезать найденные конструкции и то, что между ними. Если не справлюсь, то отпишу.
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
Вобщем, не получается удалять <!-- ad -->, <!-- /ad --> и содержимое между ними. Пришел вот к чему (и всяким вариациям вокруг этого):
Помогите, пожалуйста.
Код:
******@ssh:~$ cat 1.php | sed '/<!--.\/ad -->'/d'
Помогите, пожалуйста.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Использование Grep, Sed [проблемы решены]
вопрос: эти штуки всегда на одной строчке? то есть допустим только вот так:
или же возможны варианты типа
или вот так:
и нужно удалить только выделенное?
короче пару примеров не помешает.
Относительно:
точка в <!--. означает что за -- будет следовать что-нить еще а потом /ad, это точно так? кавычка после --> поставит в тупик sed, поскольку он не видит продолжения команды.... а последняя кавычка поставит в тупик bash, поскольку bash захочет еще одну.
Код: Выделить всё
<!-- ad --!> blablabla <!-- /ad --!>
или же возможны варианты типа
Код: Выделить всё
<!-- ad --!>
bla-bla-bla
<!-- /ad --!>
или вот так:
blabla1 <!-- ad --!> blabla2 <!-- /ad --> blabla3
и нужно удалить только выделенное?
короче пару примеров не помешает.
Относительно:
Код: Выделить всё
cat 1.php | sed '/<!--.\/ad -->'/d'
точка в <!--. означает что за -- будет следовать что-нить еще а потом /ad, это точно так? кавычка после --> поставит в тупик sed, поскольку он не видит продолжения команды.... а последняя кавычка поставит в тупик bash, поскольку bash захочет еще одну.
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
diesel, спасибо, что помогаешь!
Если я не ошибаюсь, то сегодня видел даже такой вариант:
[важный код]<!-- ad --!>
bla-bla-bla
<!-- /ad --!>[важный код]
Только-только, еще горячая, из под клавиш вылезла такая штука:
satana@ssh:~$ cat 1.php | sed 's/<!-- ad -->.*//' | sed 's/else.*->//'
Изначально, например, так:
А получается так.
Вобщем, пока вопросов нет. Пойду тестить на других файлах.
Если я не ошибаюсь, то сегодня видел даже такой вариант:
[важный код]<!-- ad --!>
bla-bla-bla
<!-- /ad --!>[важный код]
Только-только, еще горячая, из под клавиш вылезла такая штука:
satana@ssh:~$ cat 1.php | sed 's/<!-- ad -->.*//' | sed 's/else.*->//'
Изначально, например, так:
Код: Выделить всё
satana@ssh:~$ cat 1.php
<html><head><meta http-equiv="refresh" content="0;URL=../../"><head>
<body bgcolor="#FFFFFF"><!-- ad --><script>строчка1
elseстрочка2</SCRIPT><!-- /ad --></body>
</html>
А получается так.
Код: Выделить всё
satana@ssh:~$ cat 1.php | sed 's/<!-- ad -->.*//' | sed 's/else.*->//'
<html><head><meta http-equiv="refresh" content="0;URL=../../"><head>
<body bgcolor="#FFFFFF">
</body>
</html>satana@ssh:~$
Вобщем, пока вопросов нет. Пойду тестить на других файлах.
-
- Сообщения: 296
- ОС: fedora, mandriva
Re: Использование Grep, Sed [проблемы решены]
Код: Выделить всё
[guest@station tmp]$ cat text
<html><head><meta http-equiv="refresh" content="0;URL=../../"><head>
<body bgcolor="#FFFFFF"><!-- ad --><script>строчка1
elseстрочка2</SCRIPT><!-- /ad --></body>
[guest@station tmp]$ cat text | sed "s/<\!-- ad -->//g" | sed "s/<\!-- \/ad -->//g"
<html><head><meta http-equiv="refresh" content="0;URL=../../"><head>
<body bgcolor="#FFFFFF"><script>строчка1
elseстрочка2</SCRIPT></body>
</html>
[guest@station tmp]$
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
Folderx, не. Надо удалить и эти теги и содержимое внутри их. Впрочем, решено всё. Вот такой вот строкой в баше. В *.sh у меня непонятно почему не получилось сделать, вылазили абсолютно левые файлы после команды grep.
Дико извиняюсь за растянутую страницу.
Код: Выделить всё
[superhost@web17 ~/superhost.nichost.ru/docs]$ grep -lirE '<!-- \/?ad -->' . | while read; do cat $REPLY | sed 's/<!-- ad -->.*//' | sed 's/else.*->//' > $REPLY'1'; rm $REPLY;cp $REPLY'1' $REPLY;rm $REPLY'1';done
Дико извиняюсь за растянутую страницу.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Использование Grep, Sed [проблемы решены]
возможно в этих файлах тоже есть что-то подобное. запустите grep -irE --color 'шо ищим' и он подсветит совпадение то что нашел в этом файле.
Обратите внимание на ключик sed'а -i: smth like:
сделает замену в файле, и не надо будеть делать mv, если хочется оставить бэкапы,
положит бэкап для замененого файла в "${filename}.bak"
если в sed'е нет такого ключа, но есть perl:
по поводу строчки:
while read REPLY; do ....
Обратите внимание на ключик sed'а -i: smth like:
Код: Выделить всё
sed -i -r -e 's/что заменяем/куда заменяем/g' "$filename"
сделает замену в файле, и не надо будеть делать mv, если хочется оставить бэкапы,
Код: Выделить всё
sed -i.bak -r -e 's/что заменяем/куда заменяем/g' "$filename"
положит бэкап для замененого файла в "${filename}.bak"
если в sed'е нет такого ключа, но есть perl:
Код: Выделить всё
perl -i.bak -p -e 's/что заменяем/куда заменяем/g' "$filename"
по поводу строчки:
Код: Выделить всё
grep -lirE '<!-- \/?ad -->' . | while read; do cat $REPLY
while read REPLY; do ....
Спасибо сказали:
-
- Сообщения: 8
Re: Использование Grep, Sed [проблемы решены]
В том то и дело, что при скрипте, записанном в *.sh вылазили, и картинки, и *.js, вобщем, всякие разные файлы. Я ручками проверил несколько файлов и ничего не нашел. Да и угрозы такие файлы не представляют, по идее.
А, если бы туда было что-то прописано левое (как <ad>), то рисунки, например, не должны были бы отображаться или не отображались правильно.
А в скрипте из командной строки эти "левые" файлы не вылазили. Хотя инструкции были совершенно одинаковые (проверял раз 10, думал меня глючит). Связываю это с какой-нибудь особенностью bash'а.
Бекапы как раз не надо делать. Sed не смог перезаписать файл: либо полностью его очищал (| > filename), либо дописывал в конец (| >> filename). Просто не нашел более легкого способа чтобы, записывать "очищенный" вывод. Дольше, некрасиво, но я и не претендую. Главное, что сработало =)
А, если бы туда было что-то прописано левое (как <ad>), то рисунки, например, не должны были бы отображаться или не отображались правильно.
А в скрипте из командной строки эти "левые" файлы не вылазили. Хотя инструкции были совершенно одинаковые (проверял раз 10, думал меня глючит). Связываю это с какой-нибудь особенностью bash'а.
Бекапы как раз не надо делать. Sed не смог перезаписать файл: либо полностью его очищал (| > filename), либо дописывал в конец (| >> filename). Просто не нашел более легкого способа чтобы, записывать "очищенный" вывод. Дольше, некрасиво, но я и не претендую. Главное, что сработало =)