他のパターンが一致する前に1行のパターンを一致させる方法

他のパターンが一致する前に1行のパターンを一致させる方法

この質問は次のようになります。別の特定の一致まで、各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

おすすめ記事