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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Fox24RUS
проходил мимо

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

Непрочитанное сообщение Fox24RUS » 2008-12-03 7:16:23

Решил вобщем скрипт на shell написать добавления пользователя в почте(ни когда не пользовался раньше shell) и встал вопрос каким образом удалить определенную строчку из файла fetchmailrc :smile:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-12-03 8:36:56

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

man grep

Fox24RUS
проходил мимо

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

Непрочитанное сообщение Fox24RUS » 2008-12-03 8:43:09

по поводу sed

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

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

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

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-12-03 8:49:40

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)


paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2009-02-26 22:15:07

а не подскажите, как удалить\заменить в файле несколько строк ?
например, от начального шаблона, до конечного.
With best wishes, Sergej Kandyla

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-26 22:18:31

paix писал(а):например, от начального шаблона, до конечного.
смотря, что требуется

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2009-02-26 23:01:51

требуется удалить\заменить\дописать несколько строк в переделах заданных маркеров.

Т.е., например, имеем конфиг нагиоса 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'; с многострочными что-то не получалось...
в какую сторону надо копать?
With best wishes, Sergej Kandyla

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-26 23:05:26

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

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2009-02-27 0:09:43

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 ####
With best wishes, Sergej Kandyla

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2009-02-27 0:27:03

елки, я курнул сильнее травы awk...

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

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

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

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-27 8:00:23

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

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

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

Непрочитанное сообщение paix » 2009-02-27 13:16:42

например, найти N строки первого маркера, и N2 второго., соотвественно вывести файл от 1-до N и от N2 до end
такой функционал должен быть..

возможно есть и еще более легкие способы...
With best wishes, Sergej Kandyla

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-27 14:54:55

paix писал(а):соотвественно вывести файл от 1-до N и от N2 до end
-))) авк такой красоты штатно не умеет, а нештатно уже реализованно

Аватара пользователя
rnd
мл. сержант
Сообщения: 112
Зарегистрирован: 2007-11-06 20:36:25
Откуда: RonDon

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

Непрочитанное сообщение rnd » 2009-02-28 15:09:04

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

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-28 16:54:27

rnd писал(а):Подскажите пожалуйста каким образом можно удалить из файла определенные символы?

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

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

Аватара пользователя
rnd
мл. сержант
Сообщения: 112
Зарегистрирован: 2007-11-06 20:36:25
Откуда: RonDon

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

Непрочитанное сообщение rnd » 2009-02-28 17:22:24

спасибо конечно, но файл не изменился, пробовал через

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

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

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-02-28 17:44:00

rnd писал(а):спасибо конечно, но файл не изменился
а чего ему меняться то?
rnd писал(а):но вот как его теперь сохранить в таком виде?
перенаправь вывод в файл

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

cat ... > file.txt

Аватара пользователя
rnd
мл. сержант
Сообщения: 112
Зарегистрирован: 2007-11-06 20:36:25
Откуда: RonDon

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

Непрочитанное сообщение rnd » 2009-02-28 17:48:51

zg писал(а):а чего ему меняться то?
ну я просто думал он сохранится как "mydomain2" с новыми параметрами
просто я только учусь, и тонкостей всех не знаю )

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