HTMLの文字列をルックアップファイルの値に置き換えます。

HTMLの文字列をルックアップファイルの値に置き換えます。

状況:他のファイルのデータを使用していくつかの値を完了する必要があるHTMLソースファイルがあります。

強化する必要がある値は固有のタグの間にあります。

<Uniquetag>Mystring1</uniquetag>

ファイル2には複数の列と多くの行があります。

Info1 Mystring1 OtherInfo1 MoreInfo1
Info2 Mystring2 OtherInfo2 MoreInfo2
Info3 Mystring3 OtherInfo3 MoreInfo3
....

それから私のイベントをHTMLで表示したいと思います。

<Uniquetag>Mystring1 - Info1</uniquetag>

file1 と file2 の両方が動的であり、定期的に変更されます。各変更後にスクリプトを実行します。ファイル1にはUniquetagが含まれていない可能性があるため、何も見つからないはずです。 MyString1がfile2に見つからない可能性があります。この場合、何も追加しないでください。

誰でもこれについて正しい方向を教えてもらえますか?

答え1

「パール」を使用してください

次のメタコードで説明されているように、Perlスクリプトを使用してこれを行います。

for each line in file2:
    read line
    parse line into 4 fields with a pattern match
    build an associative array with $array{field2} = "field2 - field1"

slurp file1 into a single variable f

for each pattern match of /<UniqueTag>(match)</UniqueTag>/ in f:
    replace "match" with $array{match}

答え2

赤い砂利レンガ持つ-ヒント-出るHTMLを確実に解析する試みのトラップ。

ただし、HTMLが示されているとおりにフォーマットされている場合は、次の手順で問題を解決できます。

expr=
while read -r one two rest
do
  expr="$expr; s/<uniquetag>$two<\/uniquetag>/<uniquetag>$two - $one<\/uniquetag>/"
done < file2
sed "$expr" sourcehtml > targethtml

...結果がうまくいけば、式を次sedのように変更できます。

sed -i "$expr" sourcehtml

...sourcehtmlファイルをその場で編集させます。

この状況を解決するにはいくつかの方法があり、そのいくつかは次のとおりです。

  • file2の最初の2つの列にはスラッシュまたは一重引用符があります。
  • file2に行が多すぎるため、sed式が大きすぎます(sedを複数回呼び出すと解決されます)。
  • タグは「uniquetag」とは異なり、大文字で表示されます(回答で開くタグを小文字で表します。間違っている場合は大文字で表示します)。

サンプルの実行

最初の3行の「file2」と...

ソースHTML:

<uniquetag>other</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring1</uniquetag>
<uniquetag>other</uniquetag>
<uniquetag>Mystring2</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring3</uniquetag>
<uniquetag>other</uniquetag>
<othertag>Mystring3</othertag>

出力は次のとおりです

<uniquetag>other</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring1 - Info1</uniquetag>
<uniquetag>other</uniquetag>
<uniquetag>Mystring2 - Info2</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring3 - Info3</uniquetag>
<uniquetag>other</uniquetag>
<othertag>Mystring3</othertag>

関連情報