使用awk处理与html相关的礼物格式Moodle问题
这基本上是一个awk问题,但它是关于为 格式,因此标记 我想格式化问题中的html代码(Moodle“测试”活动),但我需要用相应的实体替换使用awk处理与html相关的礼物格式Moodle问题,awk,replace,moodle,gift,Awk,Replace,Moodle,Gift,这基本上是一个awk问题,但它是关于为 格式,因此标记 我想格式化问题中的html代码(Moodle“测试”活动),但我需要用相应的实体替换,因为这些实体将被解释为“真实”html,而不是打印出来。 但是,我希望能够使用常规代码键入问题,并在将文件作为礼物导入Moodle之前对其进行后期处理 我认为awk将是实现这一目标的完美工具 假设我有这个(无效的)Moodle/gift问题: ::q1::[html]This is a question about HTML: <pre> &l
::q1::[html]This is a question about HTML:
<pre>
<p>some text</p>
</pre>
and some tag:<code><img></code>
{T}
要点:在以下情况下,用
和
替换
使用进程_src2gift.awk:
awk -f process_src2gift.awk $1.src >$1.gift
BEGIN{print”//这是一个生成的文件!'
{
如果($1==“”)#打开“代码”块
{
代码=1;
打印$0;
}
其他的
{
如果($1==“”)#关闭“代码”块
{
代码=0;
打印$0;
}
其他的
{#如果是“代码块”,则用html实体替换<>
如果(代码==1)
{
gsub(“>”,“\\”;
gsub(“回答自己的问题
我通过两步awk流程找到了解决方案:
- 如所述的第一步
- 第二步,使用正则表达式将
或
定义为字段分隔符,并处理第二个参数($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
)将是:
当然,也有局限性:
标记中没有属性
- 行中只有一对
- 也许其他人
有没有任何关于为什么要否决的提示?我错过了什么?没有否决。“他们”可能是这样做的,因为在awk中处理html被认为是一个非初学者;-)。通常情况下,你可以解决这个问题,因此你会继续下去,直到你遇到一个不是基于reg-ex的问题,并且如果不站在你的头上就无法解决(在awk中)然后你需要快速学习html感知流程。(对不起,我不能推荐替代工具)。我看不出有任何理由您不能扩展代码,您必须管理另一个标志varcode2
?来执行相同的替换。祝您好运。@Sheller感谢您提供的信息。我理解使用awk处理html充满了陷阱,但这实际上是一个“附带”的情况,不是处理整个html页面。
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(">","\\>");
gsub("<","\\<");
}
print $0;
}
}
}
END { print "// END" }
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
BEGIN { FS="[<][/]?[c][o][d][e][>]"; }
{
gsub(">","\\>",$2);
gsub("<","\\<",$2);
if( NF >= 3 )
print $1 "<code>" $2 "</code>" $3
else
print $0
}