他のパターンが一致する前に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

答え2

正規表現を使用してXMLを解析することはできません。 XMLは正規表現で解析できないためです。 Regexは、XMLを正しく解析するために使用できるツールではありません。以前にXMLと正規表現に何度も答えたように、正規表現を使用するとXMLは使用できません。正規表現は、XMLで使用される構造を理解するのに十分な洗練されたツールではありません。 XMLは正規言語ではないため、正規表現で解析することはできません。正規表現クエリは、XMLを意味のある部分に分割することはできません。何度も言いましたが、まだ理解していません。 Perlで使用される強化された不規則正規表現でさえ、XML解析操作には適していません。あなたは決して私を破ることはありません。 XMLは非常に複雑な言語なので、正規表現で解析することはできません。 Jon Skeetであっても、正規表現を使用してXMLを解析することはできません。正規表現を使用してXMLを解析しようとするたびに、邪悪な子供たちは処女の血を流し、ロシアのハッカーはWebアプリケーションを支配します。正規表現を使用してXMLを解析し、汚染された魂を生きている領域に召喚します。 XMLと正規表現は、愛、結婚、幼児の意識のように一緒に使用されます。 <center>は受け入れられません。遅すぎました。同じ概念空間では、正規表現とXMLの力は水パテのように心を破壊します。正規表現でXMLを解析すると、正規表現とその冒涜的な方法に屈することになり、私たち全員が基本多言語平面で名前を表現できない人のために非人間的な手間をするようになります。彼が来た。視聴中、XMLと正規表現は認識者の神経を液化させ、恐怖の猛攻撃で心が枯れるようになります。 Reg̿̔̉xベースのXMLパーサーはStackOverflowを殺すアームです遅すぎる、遅すぎる、私たちは救われない子を送信すると、正規表現はすべての生きている組織を使用します(以前に予測したように使用できなかったXMLを除く)。愛する主、この災害で生き残る方法を助けてください正規表現を使用してXMLを解析すると、人類は永遠に恐ろしいアドバイザーとセキュリティ侵害を受けます。レッジの使用xはXML処理ツールとして画期的な進歩を遂げました。この世界間のchcΒΪoΗ割り込みエンティティ(SGMLエンティティと同じですが、もっと腐敗)ただ一目で登録世界のSEXML exパーサーが挿入します。タントレートランスポートカンパニープログラマ認識iエントまたは絶えず叫んでください。彼が来ます。致命的で狡猾な正規表現感染私はあなたのHTを飲み込むMLパーサー、アプリはVisual Basicのように常に存在していましたが、悪かった。その人が来る その人が来る英語許可されていません正しいe com̡e̡s, ̕h̵is un̨ho͞ly radiańcé deすべてのenli̶̍̈̂̈́制限事項、XMLタグの分析leaΠki̧nΘgfr̠m̡yo͟君の目Ηs̸̛l̕ik͏e liquidpアイン、正規表現解析の曲が終わります悩むモールの声spのタルマンここでも見えます。ヘペナオinal snuf嘘をつく男性のすべてはLOŚΖ̩͇̗̪̏̈TLLはLですOST彼は来た彼女はここに来たはいその無形遺産または浸透arマイパックE MY FACE ᵒh 神 nああいいえ、いいえθ停止t彼は*Η̠̅s ͎a̧͈͖r̽̾̈́͒͑enot rè̑ͧ̌aΨl̘̝̙ͤΗ̾̆ ZA̡͊ΠΝLGΌ ISή̂Љ̯͈͕̹̘̱ TO͇̹̺ͅ松̴ş̳ TH̘ㅋㅋㅋㅋㅋS

答え3

一部のXMLパーサを適用したいが、提示された「コンテキスト」が有効なXML構造(無効な属性file:abc.txt、無効な閉じたタグ<\host>)に収まらない<\hostfile>
だからここにあります愚かな「ハッカー」:

awk  'BEGIN{ RS="<hostfile" }/file:/{ f = substr($1,6,length($1)-6) }
      /<host>/{ match($0,/.*<host>([^<>]+)<\\host>[[:space:]]*<\\hostfile>.*$/,a);  
      printf("Input: %s\nOutput: %s\n\n",a[1],f)}' yourfile

出力:

Input:  xyz.com 
Output: abc.txt

Input:  asd.com 
Output: xyz.txt

関連情報