The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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