Страница 1 из 1

удаление текста из файла

Добавлено: 2008-12-03 7:16:23
Fox24RUS
Решил вобщем скрипт на shell написать добавления пользователя в почте(ни когда не пользовался раньше shell) и встал вопрос каким образом удалить определенную строчку из файла fetchmailrc :smile:

Re: удаление текста из файла

Добавлено: 2008-12-03 7:37:04
serge

Re: удаление текста из файла

Добавлено: 2008-12-03 8:36:56
zg

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

man grep

Re: удаление текста из файла

Добавлено: 2008-12-03 8:43:09
Fox24RUS
по поводу sed

делаю sed '/test@test.ru/d' fetchmailrc.bkp

выводит экран с удаленной строкой а в файле не удаляет, что то забыл добавить ?

grep щас проверим

Re: удаление текста из файла

Добавлено: 2008-12-03 8:49:40
zg
Fox24RUS писал(а):что то забыл добавить ?
перенаправление потока в файл

Re: удаление текста из файла

Добавлено: 2008-12-03 9:21:01
Гость
Fox24RUS писал(а):делаю

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

sed  '/test@test.ru/d' fetchmailrc.bkp
выводит экран с удаленной строкой а в файле не удаляет, что то забыл добавить ?
забыл опцию -i/-I

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

sed -i '' '/test@test\.ru/d' fetchmailrc.bkp
или с backup-файлом

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

sed -i '.bak' '/test@test\.ru/d' fetchmailrc.bkp
ps, `.' (точка) - в regexp'ах означает не только точку, а абсолютно любой символ, кроме "новой строки". Поэтому не грех точку экранировать. cf. re_format(7)

Re: удаление текста из файла

Добавлено: 2008-12-03 10:01:45
Fox24RUS
Спасибо, ворк

Re: удаление текста из файла

Добавлено: 2009-02-26 22:15:07
paix
а не подскажите, как удалить\заменить в файле несколько строк ?
например, от начального шаблона, до конечного.

Re: удаление текста из файла

Добавлено: 2009-02-26 22:18:31
zg
paix писал(а):например, от начального шаблона, до конечного.
смотря, что требуется

Re: удаление текста из файла

Добавлено: 2009-02-26 23:01:51
paix
требуется удалить\заменить\дописать несколько строк в переделах заданных маркеров.

Т.е., например, имеем конфиг нагиоса services.cfg
в котором секция каждого сервера начинается с определенных меток,
типа

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

## srv1 begin
...
define service{
        use      ext-service
        host_name   srv1
        service_description  Tomcat
        check_command   check_tomcat
}

define service{
        use      ext-service
        host_name   srv1
        service_description  SMTP
        check_command   check_smtp
}
...
## srv1 end
грубо говоря хочется скриптом добавлять\удалять описания сервисов из конфига.
Разумеется нагиос как пример...

для однострочных аж бегом катит perl -pi -e 's///g'; с многострочными что-то не получалось...
в какую сторону надо копать?

Re: удаление текста из файла

Добавлено: 2009-02-26 23:05:26
zg
paix писал(а):грубо говоря хочется скриптом добавлять\удалять описания сервисов из конфига.
я на авк такое делал, в принципе нормально работает http://forum.lissyara.su/viewtopic.php?p=77717#p77717

Re: удаление текста из файла

Добавлено: 2009-02-27 0:09:43
paix
zg писал(а):я на авк такое делал, в принципе нормально работает http://forum.lissyara.su/viewtopic.php?p=77717#p77717

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

    if ($1=="##" && tolower($2)==vhost) output=1;
    if (output) print $0;
    if (output && tolower($1)=="</virtualhost>") output=0;
во блин! ;)
действительно гибко и коротко...


вспомнил что когдато подобный функционал на седе реализовывал.
логика нижеприведенного куска примера основывается на том, что ищем позицию последнего патерна окончания пула,
оригинальный конфиг копируем во временный до строки позиции этого патерна, дальше в этот временный конфиг генерируем новый пул, вставляем оставшийся кусочек от позиции последнего патерна до конца оригинального конфига..

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

#----- adding php-fpm pool for user -----#
#### function ####
gen_phpfpm_pool(){

echo "Generating php-fpm pool"

conf="/usr/local/etc/php-fpm.conf"
tmpconf="/tmp/php-fpm.generating.txt"
# end line of file
endl=`cat ${conf} | wc -l`
# last pattern line number
patl=`sed -ne '/END POOL/=' ${conf} | tail -n 1`

#part with end of pools section
sed -n "1,${patl}p" ${conf} > ${tmpconf}

#adding our pool section:
cat << EOF >> ${tmpconf}

<!-- ${username}  ${now} by $0 -->
        <!-- php-fpm.conf pool v0.5.9 -->

        <section name="pool">
            <value name="name">${username}</value>
            <value name="listen_address">/tmp/php-fpm/${username}.sock</value>
            ...
            ...
<!-- END POOL -->

EOF

# part of the end of original file
sed -n "`expr ${patl} + 1`,${endl}p" ${conf} >> ${tmpconf}

echo "Backuping old php-fpm.conf"
cp ${conf} ${conf}.bak.${now}
cp ${tmpconf} ${conf}
echo
echo "Done!"
echo "Now you can restart php-fpm pool"
echo "Please do: /usr/local/etc/rc.d/php-fpm restart"
echo
sleep 1
}
#### end function ####

Re: удаление текста из файла

Добавлено: 2009-02-27 0:27:03
paix
елки, я курнул сильнее травы awk...

все еще проще, оказывается!

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

 awk  '/start/,/stop/' f5
Вывести все строки файла f5, находящиеся между парами start/stop

Re: удаление текста из файла

Добавлено: 2009-02-27 8:00:23
zg
paix писал(а):все еще проще, оказывается
ну тут встаёт проблема как вывести все строки, за исключением диапазона, авк этого по-моему не умеет.

Re: удаление текста из файла

Добавлено: 2009-02-27 13:16:42
paix
например, найти N строки первого маркера, и N2 второго., соотвественно вывести файл от 1-до N и от N2 до end
такой функционал должен быть..

возможно есть и еще более легкие способы...

Re: удаление текста из файла

Добавлено: 2009-02-27 14:54:55
zg
paix писал(а):соотвественно вывести файл от 1-до N и от N2 до end
-))) авк такой красоты штатно не умеет, а нештатно уже реализованно

Re: удаление текста из файла

Добавлено: 2009-02-28 15:09:04
rnd
День добрый, извиняюсь за глупый вопрос... но все же:
Подскажите пожалуйста каким образом можно удалить из файла определенные символы?
Например закаментированные строки, или убрать подпись "www." в строке "www.mydomain.ru" чтоб осталось просто "mydomain.ru"
Спасибо.

Re: удаление текста из файла

Добавлено: 2009-02-28 16:54:27
zg
rnd писал(а):Подскажите пожалуйста каким образом можно удалить из файла определенные символы?

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

zg# echo www.mydomain.ru www.mydomain2.ru | sed 's/www\.//g'
mydomain.ru mydomain2.ru
zg#

Re: удаление текста из файла

Добавлено: 2009-02-28 17:22:24
rnd
спасибо конечно, но файл не изменился, пробовал через

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

cat test.txt test2.txt | sed 's/www\.//g'
в консоли видно, что от файла отбрасывается все что связанно с "www." но вот как его теперь сохранить в таком виде?

Re: удаление текста из файла

Добавлено: 2009-02-28 17:44:00
zg
rnd писал(а):спасибо конечно, но файл не изменился
а чего ему меняться то?
rnd писал(а):но вот как его теперь сохранить в таком виде?
перенаправь вывод в файл

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

cat ... > file.txt

Re: удаление текста из файла

Добавлено: 2009-02-28 17:48:51
rnd
zg писал(а):а чего ему меняться то?
ну я просто думал он сохранится как "mydomain2" с новыми параметрами
просто я только учусь, и тонкостей всех не знаю )

Спасибо, помогло. :drinks: