この質問は次のようになります。別の特定の一致まで、各grep一致の後に行を表示するには?
他のパターンが一致する前に、特定のパターンを連続的に一致させたいと思います。
ここでは、特定のホストからファイルをインポートしたいと思います。各ファイルには複数のホストがあります。したがって、特定のホストでホストファイルの表示に達する前に、固定数の行はありません。
コンテキスト:
...
...
<hostfile file:abc.txt>
<host> abc.com <\host>
<host> qwe.com <\host>
<host> xyz.com <\host>
<\hostfile>
...
<hostfile file:xyz.txt>
<host> asd.com <\host>
<\hostfile>
...
...
試合例
Input: xyz.com
Output: abc.txt
Input: asd.com
Output: xyz.txt
awk、sed、またはその他のコマンドラインツールを使用してください。
ベストアンサー1
別のawkバリアント:
/^<hostfile file:/ {
output=substr($2, 6, index($2, ">") - 6);
}
/<host>/ && $0 ~ pattern {
print output
}
呼ぶ:
$ awk -v pattern='xyz.com' -f findit.awk contextfile
abc.txt
$ awk -v pattern='asd.com' -f findit.awk contextfile
xyz.txt