LINUX.ORG.RU
ФорумAdmin

магия sed

 


0

1

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

 /var/log/apache2/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}

/var/log/apache2/ddf/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}

стало

/var/log/apache2/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}
/var/log/apache2/ddf/*.log {

daily

missingok

rotate 14

compress

delaycompress

notifempty

create 640 root adm

sharedscripts

postrotate

if /etc/init.d/apache2 status > /dev/null ; then \ /etc/init.d/apache2 reload > /dev/null; \

fi;

endscript

prerotate

if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd- prerotate; \

fi; \

endscript

}

потом отсчитал определенное число строк вверх

sed поточный редактор, назад он не умеет. используйте другие инструменты.

anc ★★★★★ ()
Ответ на: комментарий от anonymous

Ты предлагаешь искать где встречается слово , это мне надо вначале , да это и сэд может, мне надо чтобы он потом удалили строки, определенное число вверх и вниз где нет шаблона. Допустим 4 вверх и 5 вниз , от первого шаблона

sanekmihailow ()
Ответ на: комментарий от anc

хм , окей, а можно как нибудь include в любом конфиге прописать? , ориентируясь на shell

sanekmihailow ()

греп умеет выдать номера строк.

Потом эти номера строк в сед для удаления и всё.

Или как анон подсказал - инвертировать вывод грепа и перенапраить, куд надо.

PunkoIvan ★★★ ()
Ответ на: комментарий от PunkoIvan

Спасибо за grep и номера строк

придумал такой костыль, если можно как-то упростить с радостью приму к сведению

#!/bin/sh
        grep -n "$1" /etc/logrotate.d/apache2 > n1
        grep "^[0-9]*:" n1 |sed "s/\:/ /g" |awk '{print $1}' > number
        v=`cat number`
        sed "$v,/}/d" /etc/logrotate.d/apache2 > itogo
        cat itogo > /etc/logrotate.d/apache2
exit 0

А принцип работы grep -v -С я так и не понял, по отдельности понятно , но вместе , он тупо мне весь вывод передает.


yaadmin@dev1:/var/http/1111$ grep -v 'ddf' ./app
/var/log/apache2/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}

        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}



yaadmin@dev1:/var/http/1111$ grep -C 4 'ddf' ./app
                fi; \
        endscript
}

/var/log/apache2/ddf/*.log {
        daily
        missingok
        rotate 14
        compress



yaadmin@dev1:/var/http/1111$ grep -v -C4 'ddf' ./app
/var/log/apache2/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}

/var/log/apache2/ddf/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}
sanekmihailow ()
Ответ на: комментарий от anc

N несколько раз и можно научить. Это не просмотр назад, но эквивалентно.

evilface ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.