状況:他のファイルのデータを使用していくつかの値を完了する必要がある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>