Возможно ли скомбинировать эти две команды:
sed -n '/regexp/{g;1!p;};h' #печать строки непосредственно перед regexp, но не строки содержащей regexp
sed -n '/regexp/p' #печать только строк ,которые совпадают с regexpтак, чтобы результатом вывода были 2 строки - строка содержащая regexp и строка непосредственно перед ней.
grep -B1 regexp
Задача немного изменилась, теперь ТЗ:) следующее:
вывод секции файла между
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")
> Задача немного изменилась, теперь ТЗ:) следующее:Препод лютует, малацца.
> вывод секции файла между
> 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}'
> пока не представля как это возможно сделать и можно ли вообще, я
> 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да задачка не простая, сейчас обмозгую, как это сделать, наверно попытаюсь в массив загнать весь файл и буду писать скрипт для обработки.
Если у кого есть какие-то предложения, с радостью выслушаю
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
> Если у кого есть какие-то предложения, с радостью выслушаюПолностью задачу расскажи. Тут какие-то огромные конструкции, 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 дней недели,
то есть шанс уйти в бесконечность при проверке.
тоесть алгоритм следующий:
если строка содержит '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