Змена текста в файле

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

vasyakrn
Сообщения: 5

Змена текста в файле

Сообщение vasyakrn »

Помогите написать bash скрипт, при запуску которого будет загружаться файл http://site.ru/g.txt, содержание которого

#start
...
#end
Шаг один проверить есть ли там "#start", если есть переходим к второму шагу


Потом все содержание файла http://site.ru/g.txt вставить в файл /root/a/l.conf по шаблону начало вставки #start конец #end

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21439
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Змена текста в файле

Сообщение Bizdelnick »

vasyakrn писал(а):
19.01.2016 12:21
Помогите написать bash скрипт

С удовольствием. Покажите, что уже написали.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
vasyakrn
Сообщения: 5

Re: Змена текста в файле

Сообщение vasyakrn »

Bizdelnick писал(а):
19.01.2016 12:45
vasyakrn писал(а):
19.01.2016 12:21
Помогите написать bash скрипт

С удовольствием. Покажите, что уже написали.

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

cd /root/a/
/usr/bin/wget -O g.txt http://site.ru/g.txt

if grep -q start g.txt
then
{
    echo "yes"
    #сюда осталось добавить замену через рег.выражение в файле l.conf где начало замены #start а конец #end . Заменять контентом из файла g.txt
    mv g.txt
}
else
{
    echo "no"
    rm g.txt
}
fi;
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21439
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Змена текста в файле

Сообщение Bizdelnick »

Замена через регулярку здесь не прокатит, если ограничиться grep/sed, потому что они работают с отдельными строками. Можно сделать, например, так:

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

started=0
while read line; do
    if [ "$line" = "#start" ]; then
        started=1
    fi
    if [ $started -ne 0 ]; then
        echo "$line" >> a.txt
    fi
    if [ "$line" = "#end" ]; then
        break
    fi
done < g.txt
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Змена текста в файле

Сообщение SLEDopit »

Можно проще.

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

wget -O /tmp/g.txt http://site.ru/g.txt
if grep '#start' /tmp/g.txt ; then
 sed -n '/#start/,/#end/{/#start/d;/#end/q;p}' /tmp/g.txt >> /root/a/l.conf
 # тут /#start/d;/#end/d; из sed'a можно выкинуть, при условии, что эти строки тоже нужны в l.conf
else
 echo "not found"
fi
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
vasyakrn
Сообщения: 5

Re: Змена текста в файле

Сообщение vasyakrn »

SLEDopit писал(а):
19.01.2016 15:21
Можно проще.

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

wget -O /tmp/g.txt http://site.ru/g.txt
if grep '#start' /tmp/g.txt ; then
 sed -n '/#start/,/#end/{/#start/d;/#end/q;p}' /tmp/g.txt >> /root/a/l.conf
 # тут /#start/d;/#end/d; из sed'a можно выкинуть, при условии, что эти строки тоже нужны в l.conf
else
 echo "not found"
fi

Добавляет в конец содержание файла http://site.ru/g.txt , а нужно чтоб все заменялось

Скрипт будет запускаться по крону и файл http://site.ru/g.txt будет начинаться с #start и заканчиватся на #end .
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Змена текста в файле

Сообщение SLEDopit »

vasyakrn писал(а):
19.01.2016 16:12
Добавляет в конец содержание файла http://site.ru/g.txt , а нужно чтоб все заменялось
>> на > заменить в строке с sed'ом. и всё.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
vasyakrn
Сообщения: 5

Re: Змена текста в файле

Сообщение vasyakrn »

SLEDopit писал(а):
19.01.2016 16:20
vasyakrn писал(а):
19.01.2016 16:12
Добавляет в конец содержание файла http://site.ru/g.txt , а нужно чтоб все заменялось
>> на > заменить в строке с sed'ом. и всё.

что именно заменить? Можете написать сами код?

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

sed -n '/#start/,/#end/{/#start/d;/#end/q;p}' /tmp/g.txt >> /root/a/l.conf


Напомню что в файле /tmp/g.txt есть #start и #end и их нужно оставить в файле /root/a/l.conf чтоб при другом запуске скрипта все работало
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21439
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Змена текста в файле

Сообщение Bizdelnick »

iУведомление от модератора Bizdelnick
Второй раз Вам напоминаю, что решать за Вас задачки на этом форуме никто не нанимался. Вам уже достаточно помогли, осталось только включить мозг и понять, как работают предложенные решения, чтобы при необходимости подправить их. Тему закрываю. Привет преподу.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: