Предыдущая строка должна быть напечатана, если следующая строка начинается с определенного слова - PullRequest
1 голос
/ 18 июля 2010

Как напечатать линию, которая соответствует определенному шаблону и строке перед ним?

У меня есть дамп, подобный этому:

Apple:Orange=9942501133;
Fault Code 9
Apple:Orange=9942501144;
Fault Code 9
Apple:Orange=9942501155;
Apple:Orange=9942501166;
Apple:Orange=9942501177;
Fault Code 9
Apple:Orange=9942501188;
Apple:Orange=9942501199;
Apple:Orange=9942501200;
Apple:Orange=9942501211;
Fault Code 9
Apple:Orange=9942501222;

Результатом вывода будет указанная выше строка «Код ошибки 9» с включенным кодом ошибки 9:

Apple:Orange=9942501133;
Fault Code 9
Apple:Orange=9942501144;
Fault Code 9
Apple:Orange=9942501177;
Fault Code 9
Apple:Orange=9942501211;
Fault Code 9

Ответы [ 5 ]

3 голосов
/ 18 июля 2010
# grep -B1 ^Fault log.txt

Переключатель -B означает «до».

1 голос
/ 18 июля 2010

простак:

/^Fault Code 9/ {
  print s
  print $0
}

{
  s = $0
}
1 голос
/ 17 июля 2010

Это должно сделать работу.

cat yourfile | perl -e 'while(<STDIN>) { if(/Fault Code 9/) { print $prev; } $prev=$_; }'

В чистой оболочке:

cat yourfile | while read line
do
  if [ "$line" == "Fault Code 9" ]; then
    echo "$prev"
  fi
  prev=$line
done
0 голосов
/ 17 июля 2010
grep -B1 'Fault Code 9' filename.txt 
0 голосов
/ 17 июля 2010
tr -d '\n' <yourfile | grep -E -o '[^; ]+; *Fault Code 9' | sed 's/;.*$//'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...