擅长:python、mysql、java
<p>Perl解决方案:</p>
<pre><code>perl -ne '
if (/^(\[[0-9]+\]) (.*)/) {
$f{$1} = $2;
} else {
push @lines, $_;
}
END {
print s{\$\^\{(\[[0-9]+\])\}\$}{$f{$1} // "Missing $1!!!"}ger
for @lines }
' file.txt
</code></pre>
<ul>
<li><code>-n</code>逐行读取输入</li>
<li>第一个正则表达式匹配脚注的定义,它将文本存储到<code>[1]</code>、<code>[2]</code>等键下的散列<code>%f</code>中</li>
<li>不包含脚注定义的行存储在<code>@lines</code>数组中</li>
<li>读取文件后,将打印存储的行。在每一行上,脚注的引用都被存储在散列中的值替换,如果没有找到定义,则替换为<code>Missing [4]</code></李>
</ul>