たとえば、次のファイルから:
CREATE SYNONYM I801XS07 FOR I8010.I801XT07
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
CREATE SYNONYM I801XS07 FOR I8010.I801XT07
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
Table altered.
DROP INDEX I8011I01
*
ERROR at line 1:
ORA-01418: specified index does not exist
Index created.
ORA-
このORA-
行と前の4行を見つけて表示する方法が欲しいです。
CREATE SYNONYM I801XS07 FOR I8010.I801XT07
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
CREATE SYNONYM I801XS07 FOR I8010.I801XT07
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
DROP INDEX I8011I01
*
ERROR at line 1:
ORA-01418: specified index does not exist
ベストアンサー1
オプションは-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
。
ブルース・エディガー回答本質的に同じことを行うので、awk
その構文はsed
。