XFS является горным телом и был в ядре целую вечность. Исследуйте инструменты как xfs_freeze и посмотрите, является ли это тем, что Вы ищете. Я знаю, что это очень субъективно, но я использовал XFS для хранения данных в течение многих лет без инцидента.
Предположим, Вы находитесь в пожилой системе, как HP-UX, который не имеет утилит GNU, просто старый, исходный BSD или AT&T "grep". Вы могли сделать что-то вроде этого:
#!/bin/sh
awk '/ORA-/ { print line1; print line2; print line3; print line4; print $0 }\
// {line1 = line2; line2 = line3; line3 = line4; line4 = $0}' $1
Да, существуют тонны граничных условий, в которых это не разбирается, но whatta ya не хотят ни для чего? Кроме того, учитывая, что Вы работаете над некоторым decroded, устаревшей ОС и аппаратными средствами, у Вас, вероятно, нет лошадиной силы ЦП для необычной обработки ошибок.
-B
опция к grep
делает точно что: grep -B 4 ORA- your_file
.
В отсутствие GNU grep
, Я адаптировался grep4
пример из гримуара sed учебное руководство:
#!/bin/sh
# grepB4: prints out 4 lines before and the line including pattern
# if there is only one argument, exit
case $# in
1);;
*) echo "Usage: $0 pattern";exit;;
esac;
sed -n '
'/"$1"/' !{
# does not match - add this line to the hold space
H
# bring it back into the pattern space
x
# Two lines would look like .*\n.*
# Three lines look like .*\n.*\n.*
# Delete extra lines - keep four
s/^.*\n\(.*\n.*\n.*\n.*\)$/\1/
# put it back in hold space
x
}
'/"$1"/' {
# matches - append the current line
H
# bring hold space contents into pattern space
g
# print the 4 lines
p
# add the mark
a\
---
}'
Использование: grepB4 pattern < file
.
Ответ Bruce Ediger делает по существу то же самое с awk
, который часто имеет менее загадочный синтаксис, чем sed
.
awk 'NR == FNR && $0 ~ p {
for (i = FNR; i >= FNR - l; i--)
nr[i]; next
}
FNR in nr
BEGIN {
ARGV[ARGC++] = ARGV[ARGC - 1]
}' l=4 p=ORA- infile
На Солярисе используют nawk или/usr/xpg4/bin/awk.