-B
私はinとフラグをサポートしていないAIX 6.1を使用しています-A
。
grep: Not a recognized flag: B
私が実行したいとしましょう。
cat file | grep -E -B4 'Directory entry type.*Indirect' | grep "Database name" | awk '{print $4}'
AIXでこのロジックをどのように実装しますか?
編集する
私の実際のコードは次のとおりです。
NAME_EXISTS=`db2 LIST DB DIRECTORY | grep -E -B5 'Directory entry type.*Remote' | grep "Database alias" | awk '{print $4}' | grep -i ${NAME} | wc -l`
if [ ${NAME_EXISTS} -gt 0 ]; then
db2 LIST DB DIRECTORY | grep -E -A5 "Database alias.*${NAME}"
fi
アイデアは、名前のリモートデータベースが存在するかどうかを探し$NAME
、見つかった場合は最初の5行を表示することですDatabase alias.*${NAME}
。$NAME
ユニークですDatabase alias
。
出力はdb2 LIST DB DIRECTORY
次のとおりです。
System Database Directory
Number of entries in the directory = 3
Database 1 entry:
Database alias = OLTPA
Database name = OLTPA
Local database directory = /db2/data
Database release level = 10.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Database 2 entry:
Database alias = OLTPF
Database name = OLTP
Node name = OLTPN
Database release level = 10.00
Comment =
Directory entry type = Remote
Catalog database partition number = -1
Alternate server hostname =
Alternate server port number =
Database 3 entry:
Database alias = ADMIN
Database name = ADMIN
Local database directory = /db2/data
Database release level = 10.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
NAME=OLTPF
出力は次のとおりです。
Database alias = OLTPF
Database name = OLTP
Node name = OLTPN
Database release level = 10.00
Comment =
Directory entry type = Remote
NAME=OLTPE
出力が出ないからです。
ベストアンサー1
edはこれを行う簡単な方法を提供できます。
一致するものが1つしかないと仮定できる場合、パイプラインの代替案はedを使用し、不要なcatと補助grepを削除することです。
ed -s file <<\EOED | awk '/Database name/ {print $4}'
/Directory entry type.*Indirect/-4,//p
q
EOED
1つ以上の場合、重複なし一致する場合は、edのグローバルコマンドを使用して表示できます。
ed -s file <<\EOED | awk '/Database name/ {print $4}'
g/Directory entry type.*Indirect/-4,.p
q
EOED
重複した一致ケースを説明するために文字列を一致させ、foo
7行と9行に一致があり、各一致の最初の3行をコンテキストとして使用すると仮定すると、出力は次のようになります。
line 4 <--- context
line 5 <--- context
line 6 <--- context
line 7 foo <--- matched
line 6 <--- context <--- repeated
line 7 foo <--- context <--- repeated
line 8 <--- context
line 9 foo <--- matched
line 10
line 11