The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Sed затирает файлы,прошу помощи!!!!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Sed затирает файлы,прошу помощи!!!!"  
Сообщение от bayer email(ok) on 20-Фев-08, 13:17 
Исходные данные:
есть огромное количество практически идентичных файлов с именем "mask" разбросаных по всей всем каталогам пользователей.
Файл примерно следущего содерджания:
Allow from 1 2 3
Allow from sam liza
......
Нужно либо добавить строчку между этими двумя,либо добавить значение в одну из строк,например Allow from 1 2 3 4

Как я пытался это сделать:
for i in ` find /home -name "mask" `
do
cat $i | sed -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' > $i
done

Результат примерно 60 %  файлов обрабатывается корректно,остальные просто становяться пустыми.(((
Прошу помощи,укажите что не правильно в скрипте,либо предложите свой вариант решения...

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Sed затирает файлы,прошу помощи!!!!"  
Сообщение от angra (ok) on 20-Фев-08, 13:31 
Во-первых, всегда берите переменные с именами файлов в кавычки, это избавит от проблем с файлами имеющими в себе пробелы. Во-вторых, избегайте чтения и записи файла в одной пайпе, именно это и приводит к затиранию, так как файл может сначала быть открыт на запись (а значит обнулен) и только потом с него будут пытаться читать.

Таким образом переписываем:
сat $i | sed -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' > $i
на
sed -ibak -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' "$i"
опция -i заставляет sed редактировать файл, если после -i указан суффикс(в данном случае bak), то он делает бэкап копию с добавлением этого суффикса к имени.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Sed затирает файлы,прошу помощи!!!!"  
Сообщение от idle (ok) on 21-Фев-08, 12:05 
>[оверквотинг удален]
>обнулен) и только потом с него будут пытаться читать.
>
>Таким образом переписываем:
>сat $i | sed -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' > $i
>на
>sed -ibak -e 's/Allow from 1 2 3/Allow from 1 2 3
>4/g' "$i"
>опция -i заставляет sed редактировать файл, если после -i указан суффикс(в данном
>случае bak), то он делает бэкап копию с добавлением этого суффикса
>к имени.

Только не забывайте, что опция -i - are non-standard FreeBSD extensions and may not be available on other operating systems. К сожалению.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "файлы,прошу"  
Сообщение от Andrey Mitrofanov on 21-Фев-08, 12:23 
>>опция -i заставляет sed редактировать файл, если после -i указан суффикс(в данном
>>случае bak), то он делает бэкап копию с добавлением этого суффикса
>Только не забывайте, что опция -i - are non-standard FreeBSD extensions and
>may not be available on other operating systems. К сожалению.

$ sed --version
GNU sed версия 4.1.5
[...]
$ sed --help
[...]
  -i[СУФФИКС], --in-place[=СУФФИКС]
                 редактирование файлов на месте (создает копию, если указано расширение)

[...]

И ничего про FreeBSD... В `info sed` тоже. Есть в GNU -- Ж)
вполне себе "стандарт", хотя бы с какой-то точкт зрения.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Sed затирает файлы,прошу помощи!!!!"  
Сообщение от L0n3R4ng3r (ok) on 21-Фев-08, 17:50 
>[оверквотинг удален]
>строк,например Allow from 1 2 3 4
>
>Как я пытался это сделать:
>for i in ` find /home -name "mask" `
>do
>cat $i | sed -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' > $i
>done
>
>Результат примерно 60 %  файлов обрабатывается корректно,остальные просто становяться пустыми.(((
>Прошу помощи,укажите что не правильно в скрипте,либо предложите свой вариант решения...

Как вариант:

for i in ` find /home -name "mask" `
do
cat $i | sed -e 's/Allow from 1 2 3/Allow from 1 2 3 4/g' > $i.bak
mv $i.bak $i
done

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру