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

问题描述 投票:1回答:1

这基本上是一个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的shell脚本(实际上是gawk)。

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)工具的建议。

awk replace moodle gift
1个回答
0
投票

回答自己的问题。

我通过执行两步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>
  • 可能是其他人...
© www.soinside.com 2019 - 2024. All rights reserved.