使用awk处理与html有关的礼物格式Moodle问题

这基本上是一个awk问题,但它涉及处理Moodle的数据 Gift格式,也就是标签。

我想格式化问题中的html代码(Moodle“测试”活动),但我需要用相应的实体替换,因为这些实体将被解释为“真实的” html,而不是打印出来的。 但是,我希望能够使用常规代码键入问题并在将该文件作为礼物导入Moodle之前对其进行后处理。

我认为awk将是执行此操作的理想工具。

说我有这个(无效的)Moodle /礼物问题:

::q1::[html]This is a question about HTML:
<pre>
<p>some text</p>
</pre>
and some tag:<code><img></code>
{T}

我想要的是一个脚本,可以将其转换为有效的礼物问题:

::q1::[html]This is a question about HTML:
<pre>
&lt;p&gt;some text&lt;/p&gt;
</pre>
and some tag:<code>&lt;img&gt;</code>
{T}

关键点:在以下情况下,用&lt;&gt;替换:

  1. <pre>-</pre>集团内部(假设这些标记单独位于一行中)
  2. <code></code>之间,且介于两者之间的任意字符串。

对于第一部分,我很好。我有一个叫awk(实际上是gawk)的shell脚本。

awk -f process_src2gift.awk $1.src >$1.gift

与process_src2gift.awk:

BEGIN { print "// THIS IS A GENERATED FILE !" }
{
    if( $1=="<pre>" ) # opening a "code" block
    {
        code=1;
        print $0;
    }
    else
    {
        if( $1=="</pre>" ) # closing a "code" block
        {
            code=0;
            print $0;
        }
        else
        { # if "code block",replace < > by html entities
            if( code==1 )
            {
                gsub(">","\\&gt;");
                gsub("<","\\&lt;");
            }
            print $0;
        }
    }
}
END { print "// END" }

但是,我坚持第二个要求。

问题:

  1. 是否可以在我的awk脚本代码中添加以处理<code>标记内的hmtl代码?任何想法 ?我曾考虑过使用sed,但没有看到如何做。

  2. 也许awk不是正确的工具吗?我愿意接受其他(标准Linux)工具的建议。

zengh225 回答:使用awk处理与html有关的礼物格式Moodle问题

回答自己的问题。

我通过执行两步awk过程找到了解决方案:

  • 所描述的第一步
  • 第二步,使用正则表达式将<code></code>定义为字段定界符,并处理第二个参数($ 2)上的字符串替换。

shell文件变为:

echo "Step 1"
awk -f process_src2gift.awk $1.src >$1.tmp

echo "Step 2"
awk -f process_src2gift_2.awk $1.tmp >$1.gift

rm $1.tmp

第二个awk文件(process_src2gift_2.awk)将是:

BEGIN { FS="[<][/]?[c][o][d][e][>]"; }
{
    gsub(">","\\&gt;",$2);
    gsub("<","\\&lt;",$2);
    if( NF >= 3 )
        print $1 "<code>" $2 "</code>" $3
    else
        print $0
}

当然有限制:

  • <code>标记中没有属性
  • 该行中只有一对<code></code>
  • 可能是其他人...
本文链接:https://www.f2er.com/2997464.html

大家都在问