从动态文件中搜索值并传递给 HTML 中的变量

从动态文件中搜索值并传递给 HTML 中的变量

我有以下格式的文件,我想将值传递给 HTML

BE64533-A0E1-4F98-A91F-02C1D0 column=ABC_Received:ABC_Structure_Type, timestamp=1439978656596, **value=ASCII**
BE64533-A0E1-4F8-A9F-03CE2C1D0 column=ABC_Received:Current_To, timestamp=1439978656596, **value=RPI** 

如何从此文件获取值(ASCII 和 RPI)并传递给 STATIC HTML 标签。我在下面有 HTML 标记作为我想要包含该值的位置(ASCII 和 RPI)

<!--Row 1 Header -->
<tr>
<td class="HeaderCell">ABC_Structure_Type</td>
<td class="HeaderCell">Current_To</td>


<!--Row 1 Values -->
<tr>
<td  class="ValueCell">[ABC_Structure_Type]</td>
<td  class="ValueCell">[_Current_To]</td>

需要的输出如下图

<!--Row 1 Values -->
<tr>
<td  class="ValueCell">ASCII</td>
<td  class="ValueCell">RPI</td>

从文件中,它们需要分别替换为 ASCII 和 RPI 值的文件中的第 1 行值 [ABC_Structure_Type] 和 [Current_To]

答案1

好吧,目前还不清楚您真正想要做什么,但很明显,您需要从文件中解析这些值。为此,只需将值放入单独的数组中,如下所示(您需要使用包含值的实际文件设置 YourFile):

H=()
V=()
while read -r Line; do 
  H+=("$( printf "%s" "$Line" | grep -o 'column=[^,]*' | sed 's/^column=ABC_Received://')" )
  V+=("$( printf "%s" "$Line" | grep -o ' \*\*value=.*\*\*$' | sed 's/.*=\(.*\)\*\*$/\1/' )")
done < "$YourFile"

要检查数组是否正确填充,只需运行

printf "%s\n" "${H[@]}"
printf "%s\n" "${V[@]}"

如果您只想为静态 HTML 页面创建存根,那么您现在就可以轻松地做到这一点,如果您编辑上面的 printfs 或使用简单的循环(如果您想对值执行一些不同的事情):

for v in "${H[@]}"; do 
  printf '<td class="HeaderCell">%s</td>\n' "$v"
done

for v in "${V[@]}"; do 
  printf '<td class="ValueCell">%s</td>\n' "$v"
done

带有示例值的输出将是:

<td class=HeaderCell>ABC_Structure_Type</td>
<td class=HeaderCell>Current_To</td>
<td class=ValueCell>ASCII</td>
<td class=ValueCell>RPI</td>

当然,您现在可以使用这些值做任何您想做的事情(不仅仅是 printfs)。

免责声明:GNU/bash 脚本...

答案2

好吧,假设 a) id-field 的前两个部分是将两行组合在一起的关键,并且 b) 您也可以从命令行使用 perl,以下脚本将解析出值 - 字段,并将其转换给定输入文件的 html 输出:

#!/usr/bin/perl
my $fn=shift;
my ($ABC_found,$ASCII,$RPI,$ID)=(0,"","","");
open(FIN,"<",$fn) || die ("cannot open infile $fn");
sub print_html {
    $asc = shift;
    $rpi = shift;
print("
<html><body>
<!--Row 1 Header -->
<tr>
<td class='HeaderCell'>ABC_Structure_Type</td>
<td class='HeaderCell'>Current_To</td>
<!--Row 1 Values -->
<tr>
<td  class='ValueCell'>$asc</td>
<td  class='ValueCell'>$rpi</td>
</body></html>");
}

while (<FIN>) {
    if ($ABC_found==0 && m/^([\w\d]*)[\-]([\w\d]*).*ABC_Structure.*,        [\s]timestamp=.*,[\s]value=(.*)$/) {
        # print("ASCII : [$1]-[$2] : [$3]\n");
        $ABC_found=1;
        $ID="$1-$2";
        $ASCII=$3
    } elsif ($ABC_found==1 && m/^$ID.*Current_To.*[\s]timestamp=.*,[\s]value=(.*)$/) {
        $ABC_found=0;
        # print("RPI : [$1]\n");
        $RPI=$1;
        print_html($ASCII,$RPI);
    } else {    
        $ABC_found=0;
    }
}
close(FIN);

用法:

$> perl script.pl inputfile.txt

玩得开心 !

相关内容