1

我在 bash 脚本中使用以下 Perl oneliner 来捕获 pre 标记之间的多行文本,并添加包装在不同开始和结束字符串中的标记内容的第二次迭代:

new_start_string="NEWSTART"
new_end_string="NEWEND"

perl -i -pe  "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/<pre>\$1<\/pre>${new_start_string}\$1${new_end_string}/smg" /path/to/file

它非常适合指定的任务。我知道我正在使用正则表达式解析 HTML,这并不理想,但是此文本文件的格式是一个已知因素,非常简单,在本地控制下并由本地规范完成,因此很少会进行解析矫枉过正,我选择不通过解析来做到这一点。

使用相同的 oneliner,我如何对捕获值 $1 变量的第二次迭代进行 URL 编码?如果不可能,是否有另一种方法可以得到这个结果也相对简单易读?

4

2 回答 2

0

对于 URI 转义,您可以使用URI::Encode。要在替换中使用函数,请参阅/e选项。

于 2012-08-30T12:25:58.803 回答
0

因为我更喜欢在 Perl 核心中使用模块,所以我使用 e 修饰符和 CGI​​::Util 结合使用了这个 oneliner:

perl -MCGI -i -pe  "BEGIN{undef $/;} s/<pre>(.*?)<\/pre>/'<pre>' . \$1 . '<\/pre>' . '$new_start_string' . CGI::escape(\$1) . '$new_end_string'/esmg" /my/path
于 2012-08-30T14:03:19.093 回答