Есть файлы примерное содержание которых выглядит так:
<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>" заменяется на пробелы т.е. размер файлов остается таким же.
Я бы хотел что бы код удалялся, не смог этого добиться, возможно вы знаите решение. Возможно есть какое то более рациональное решение.
Спасибо.
Удаление текста по шаблону в файлах
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Удаление текста по шаблону в файлах
о! моя любимая задачка :)
наверное
Код: Выделить всё
sed -r 's|<iframe src="http://[^>]+></iframe>||g' test_file.html
пойдёт?
ЗЫЖ не мешайте больше в одну кучу столько команд...
это что за версия sed???
sed --version
пожалуйста.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Удаление текста по шаблону в файлах
подумал 
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) вопрос с пробелами непонятен и после обдумывания. наверное в следующем году дойдёт

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) вопрос с пробелами непонятен и после обдумывания. наверное в следующем году дойдёт

-
- Сообщения: 145
Re: Удаление текста по шаблону в файлах
drBatty писал(а): ↑31.12.2009 04:00
о! моя любимая задачка
наверное
Код: Выделить всё
sed -r 's|<iframe src="http://[^>]+></iframe>||g' test_file.html
пойдёт?
ЗЫЖ не мешайте больше в одну кучу столько команд...
это что за версия sed???
sed --version
пожалуйста.
Увы, к сожаление ваш пример не подошел, файл остался не тронутым.
sed --version
GNU sed version 4.2.1
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Удаление текста по шаблону в файлах
а... это просто надо добавить ключ -i, мой пример просто выводит файлы в консоль.
да, вместо имени файла поставьте *, если вам нужны все.
и что-же у вас вывелось? должно было много букв, причём все правильные
попробуйте на одном файле, потом сделайте для всех.
-
- Сообщения: 145
Re: Удаление текста по шаблону в файлах
Код: Выделить всё
sed -i 's|<iframe src="http://[^>]+></iframe>||g' qqq
Содержание qqq:
<iframe src="http://ya.ru/index.php"></iframe>
Ноль реакции.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Удаление текста по шаблону в файлах
ещё-бы!
а где ключ -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 байт - пустая строка - это перевод строки. их тоже можно убрать, если вы пожелаете (хотя, зачем?)
-
- Сообщения: 145
Re: Удаление текста по шаблону в файлах
Код: Выделить всё
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?
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Удаление текста по шаблону в файлах
1)нет. будут проблемы... хотя, если между >< ничего нет, то всё будет ОК.
2)любой текстовый файл в Linux (практически вообще любой кроме исполняемых, мультимедиа, и архивов) ДОЛЖЕН заканчиваться \n. Если это не так, многие другие программы этого не поймут.
ну если файлов немного (<1000), то всё нормально. что верно для всех утилит. (свойство bash'а)
нет. вот тут надо
find . -type f | xargs sed...
-type f для того, что-бы брать только файлы. А ещё они тогда будут не сортированными.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Удаление текста по шаблону в файлах
Строго говоря, не только в количестве файлов дело, но и в длинах их имён: ограничение есть на длину командной строки в символах.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж