Удаление текста по шаблону в файлах

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

Удаление текста по шаблону в файлах

Сообщение Grih65kop »

Есть файлы примерное содержание которых выглядит так:
<iframe src="http://ya.ru/index.php"></iframe>

Нужно именно этот код удалить из файлов, делаю так:
egrep -l '<iframe src="http://.*</iframe>' * | xargs sed -i 's/<iframe src="http\:\/\/.*<\/iframe>//g'

Все работает. Но код "<iframe src="http://ya.ru/index.php"></iframe>" заменяется на пробелы т.е. размер файлов остается таким же.
Я бы хотел что бы код удалялся, не смог этого добиться, возможно вы знаите решение. Возможно есть какое то более рациональное решение.
Спасибо.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление текста по шаблону в файлах

Сообщение drBatty »

Grih65kop писал(а):
31.12.2009 03:00
Есть файлы примерное содержание которых выглядит так:
<iframe src="http://ya.ru/index.php"></iframe>

о! моя любимая задачка :)
наверное

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

sed -r 's|<iframe src="http://[^>]+></iframe>||g' test_file.html


пойдёт?

ЗЫЖ не мешайте больше в одну кучу столько команд...


Grih65kop писал(а):
31.12.2009 03:00
Все работает. Но код "<iframe src="http://ya.ru/index.php"></iframe>" заменяется на пробелы т.е. размер файлов остается таким же.

это что за версия sed???
sed --version
пожалуйста.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление текста по шаблону в файлах

Сообщение drBatty »

подумал :)

PPS:
1) кормить все файлы egrep в поисках шаблона, а потом заставить sed искать то-же шаблоне не рационально. проще сразу всё скормить sed, пусть ищет, и где найдёт - меняет.
2) ваш код работает НЕ правильно: имеем
XXX<iframe src="http://ya.ru/index.php"></iframe>YYY<iframe src="http://ya.ru/index.php"></iframe>ZZZ
получаем:
XXXZZZ
но вы наверное хотели другого?
мой тоже не совсем так работает :)
у вас между <iframe src="http://ya.ru/index.php"> и </iframe> есть что-то? или? а вложенные теги там могут быть? тогда всё плохо.
3) вопрос с пробелами непонятен и после обдумывания. наверное в следующем году дойдёт :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Удаление текста по шаблону в файлах

Сообщение Grih65kop »

drBatty писал(а):
31.12.2009 04:00
Grih65kop писал(а):
31.12.2009 03:00
Есть файлы примерное содержание которых выглядит так:
<iframe src="http://ya.ru/index.php"></iframe>

о! моя любимая задачка :)
наверное

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

sed -r 's|<iframe src="http://[^>]+></iframe>||g' test_file.html


пойдёт?

ЗЫЖ не мешайте больше в одну кучу столько команд...


Grih65kop писал(а):
31.12.2009 03:00
Все работает. Но код "<iframe src="http://ya.ru/index.php"></iframe>" заменяется на пробелы т.е. размер файлов остается таким же.

это что за версия sed???
sed --version
пожалуйста.

Увы, к сожаление ваш пример не подошел, файл остался не тронутым.

sed --version
GNU sed version 4.2.1
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление текста по шаблону в файлах

Сообщение drBatty »

Grih65kop писал(а):
31.12.2009 04:14
Увы, к сожаление ваш пример не подошел, файл остался не тронутым.

а... это просто надо добавить ключ -i, мой пример просто выводит файлы в консоль.

да, вместо имени файла поставьте *, если вам нужны все.
и что-же у вас вывелось? должно было много букв, причём все правильные
попробуйте на одном файле, потом сделайте для всех.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Удаление текста по шаблону в файлах

Сообщение Grih65kop »

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

sed -i 's|<iframe src="http://[^>]+></iframe>||g' qqq

Содержание qqq:
<iframe src="http://ya.ru/index.php"></iframe>

Ноль реакции.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление текста по шаблону в файлах

Сообщение drBatty »

Grih65kop писал(а):
31.12.2009 04:27
Ноль реакции.

ещё-бы!
а где ключ -r???

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

drb@localhost:~$ cat qqq
<iframe src="http://ya.ru/index.php"></iframe>
drb@localhost:~$ sed -ri 's|<iframe src="http://[^>]+></iframe>||g' qqq
drb@localhost:~$ cat qqq

или вам не нравится пустая строка?
вы про это?
хотя нет:

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

drb@localhost:~$ ls -l qqq
-rw-r--r-- 1 drb users 1 2009-12-31 04:37 qqq

теперь файл в 1 байт - пустая строка - это перевод строки. их тоже можно убрать, если вы пожелаете (хотя, зачем?)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Удаление текста по шаблону в файлах

Сообщение Grih65kop »

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

ls -l qqq
-rw-r--r-- 1 Grih Grih 46 Dec 30 20:39 qqq

sed -ri 's|<iframe src="http://[^>]+></iframe>||g' qqq

ls -l qqq
-rw-r--r-- 1 Grih Grih 0 Dec 30 20:40 qqq

Спасибо, как видно все работает. Файл занимает 0 байт.
С маской файлов проблем не будет?

sed -ri 's|<iframe src="http://[^>]+></iframe>||g' ~/*.html
и т.д. верно? Можно ли задать тут рекурсивный поиск т.е. по вложеным папкам, либо придется подключать find?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление текста по шаблону в файлах

Сообщение drBatty »

Grih65kop писал(а):
31.12.2009 04:43
1)Спасибо, как видно все работает.
2)Файл занимает 0 байт.

1)нет. будут проблемы... хотя, если между >< ничего нет, то всё будет ОК.
2)любой текстовый файл в Linux (практически вообще любой кроме исполняемых, мультимедиа, и архивов) ДОЛЖЕН заканчиваться \n. Если это не так, многие другие программы этого не поймут.
Grih65kop писал(а):
31.12.2009 04:43
С маской файлов проблем не будет?

ну если файлов немного (<1000), то всё нормально. что верно для всех утилит. (свойство bash'а)
Grih65kop писал(а):
31.12.2009 04:43
Можно ли задать тут рекурсивный поиск т.е. по вложеным папкам, либо придется подключать find?

нет. вот тут надо
find . -type f | xargs sed...
-type f для того, что-бы брать только файлы. А ещё они тогда будут не сортированными.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Удаление текста по шаблону в файлах

Сообщение t.t »

drBatty писал(а):
31.12.2009 07:31
Grih65kop писал(а):
31.12.2009 04:43
С маской файлов проблем не будет?

ну если файлов немного (<1000), то всё нормально. что верно для всех утилит. (свойство bash'а)
Строго говоря, не только в количестве файлов дело, но и в длинах их имён: ограничение есть на длину командной строки в символах.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: