用查找文件中的值替换 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,因此不应查找任何内容。也有可能在 file2 中找不到 MyString1。在这种情况下不应添加任何内容。

有人能指出我在这方面的正确方向吗?

答案1

使用“perl”

我将使用 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 的前两列中有一个正斜杠或单引号
  • file2 中的行太多,导致 sed 表达式变得太大(通过多次调用 sed 解决)
  • 标签的大写与“uniquetag”不同(请注意,我在答案中小写了开始标签;如果这是错误的,则将其大写)。

样品运行

鉴于您的前三行“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>

相关内容