The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"sed печать строк перед regexp и совпадающих с regexp"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от nastr email(??) on 10-Май-12, 15:11 
Возможно ли скомбинировать эти две команды:
sed -n '/regexp/{g;1!p;};h' #печать строки непосредственно перед regexp, но не строки содержащей regexp
sed -n '/regexp/p' #печать только строк ,которые совпадают с regexp

так, чтобы результатом вывода были 2 строки - строка содержащая regexp и строка непосредственно перед ней.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от nastr email(??) on 10-Май-12, 15:16 
grep -B1 regexp
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от nastr email(??) on 10-Май-12, 16:05 
Задача немного изменилась, теперь ТЗ:) следующее:
вывод секции файла между
egrep '^Mon|^Thu|^Wen|^Tue|^Fri|^Sat|^Sun'
и
egrep -i 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn'
в любой комбинации

пока не представля как это возможно сделать и можно ли вообще, я так понимаю это лолжна быть кака-то комбинация комманд:
sed -n '/Iowa/,/Montana/p' #печать части файла между двумя регулярными выражениями, чувствительно к регистру
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d #grep для AAA или BBB или CCC (как в "egrep")

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от Andrey Mitrofanov on 10-Май-12, 16:10 
> Задача немного изменилась, теперь ТЗ:) следующее:

Препод лютует, малацца.

> вывод секции файла между
> egrep '^Mon|^Thu|^Wen|^Tue|^Fri|^Sat|^Sun'
> и
> egrep -i 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn'
> в любой комбинации

sed '/^Mon\|^Thu\|^Wen\|^Tue\|^Fri\|^Sat\|^Sun/,/abnormal\|alarm\|crit\|disconnect\|error\|except\|fail\|fatal\|killing\|panic\|reject\|restart\|warn/'

awk '/^Mon|^[.....]/{x=1}x{print}/abnormal|alarm|crit|disconnect|[.....]/{x=0}'

> пока не представля как это возможно сделать и можно ли вообще, я

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "sed печать строк перед regexp и совпадающих с regexp"  –1 +/
Сообщение от nastr email(??) on 10-Май-12, 16:47 
> sed '/^Mon\|^Thu\|^Wen\|^Tue\|^Fri\|^Sat\|^Sun/,/abnormal\|alarm\|crit\|disconnect\|error\|except\|fail\|fatal\|killing\|panic\|reject\|restart\|warn/'
> awk '/^Mon|^Thu|^Wen|^Tue|^Fri|^Sat|^Sun/{x=1}x{print}/abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn/{x=0}'

Огромное спасибо за помощь, только данные конструкции аналогичны простому cat :-)
а в идеале мне нужно:
1. находится строка содержащая 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn' например № n;
2. перед строкой n находится строка содержащая '^Mon\|^Thu\|^Wen\|^Tue\|^Fri\|^Sat\|^Sun' например № m1;
3. после строки n находится строка содержащая '^Mon\|^Thu\|^Wen\|^Tue\|^Fri\|^Sat\|^Sun' например № m2;
4. выводятся все строка содержащие 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn'между строками m1 и m2.
5. продолжать обработку со строки m2

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


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от nastr email(??) on 22-Май-12, 19:04 
strcount=`rsh $host "awk 'END{print NR}' ${list[$i]}"`
s1=1
while [ $s1 -le $strcount ]
do
    let s2=s1+1
    while true
    do
        str=`rsh $host "sed ''$s2'q;d' ${list[$i]}"|awk '{print $1}'`
        if [ $str == "Mon" -o $str == "Thu" -o $str == "Wed" -o $str == "Tue" -o $str == "Fri" -o $str == "Sat" -o $str == "Sun" ]
        then
            break
        fi
        let s2++
    done
    if [ `rsh $host "sed ''$s1','$s2'!d' ${list[$i]}"|egrep -i 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn'|wc -l` -gt 0 ]
    then
        rsh $host "sed ''$s1'q;d' ${list[$i]}"
        rsh $host "sed ''$s1','$s2'!d' ${list[$i]}"|egrep -i 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn'|uniq|tail -100
    fi
    s1=$s2
done
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "sed печать строк перед regexp и совпадающих с regexp"  +/
Сообщение от pavlinux (ok) on 01-Июн-12, 02:25 
> Если у кого есть какие-то предложения, с радостью выслушаю

Полностью задачу расскажи. Тут какие-то огромные конструкции, c rsh,
это явно не для sed/awk.

if [ $str == "Mon" -o $str == "Thu" -o $str == "Wed" -o $str == "Tue" -o $str == "Fri" -o $str == "Sat" -o $str == "Sun" ]

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

4. "печать части файла между regex"  +/
Сообщение от nastr email(??) on 10-Май-12, 16:22 
тоесть алгоритм следующий:
если строка содержит 'abnormal|alarm|crit|disconnect|error|except|fail|fatal|killing|panic|reject|restart|warn' пускай это будет строка № n
тогда найти строку которая находится перед строкой n и содержит '^Mon|^Thu|^Wen|^Tue|^Fri|^Sat|^Sun' пускай это будет строка № n
потом вывести часть файла между строками n и m
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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