Sed затирает файлы,прошу помощи!!!!, bayer, 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 % файлов обрабатывается корректно,остальные просто становяться пустыми.((( Прошу помощи,укажите что не правильно в скрипте,либо предложите свой вариант решения...
|
- Sed затирает файлы,прошу помощи!!!!, angra, 13:31 , 20-Фев-08 (1)
Во-первых, всегда берите переменные с именами файлов в кавычки, это избавит от проблем с файлами имеющими в себе пробелы. Во-вторых, избегайте чтения и записи файла в одной пайпе, именно это и приводит к затиранию, так как файл может сначала быть открыт на запись (а значит обнулен) и только потом с него будут пытаться читать. Таким образом переписываем: с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), то он делает бэкап копию с добавлением этого суффикса к имени.
- Sed затирает файлы,прошу помощи!!!!, idle, 12:05 , 21-Фев-08 (2)
>[оверквотинг удален] >обнулен) и только потом с него будут пытаться читать. > >Таким образом переписываем: >с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. К сожалению.
- файлы,прошу, Andrey Mitrofanov, 12:23 , 21-Фев-08 (3)
>>опция -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 -- Ж) вполне себе "стандарт", хотя бы с какой-то точкт зрения.
- Sed затирает файлы,прошу помощи!!!!, L0n3R4ng3r, 17:50 , 21-Фев-08 (4)
>[оверквотинг удален] >строк,например 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
|