【问题标题】:How to only copy lines of code with specific word from perl file into new file如何仅将具有特定单词的代码行从 perl 文件复制到新文件中
【发布时间】:2018-09-14 19:31:08
【问题描述】:

我在子例程中有一个带有 html 代码的 perl 文件。我想将 html 代码复制到一个新文件中,但只有 html 代码,而不是 perl 语法的其余部分。 HTML 代码都在一个子程序中,所有 HTML 代码都以 'push' 开头:

sub getTable {    
    push @htmlBase, qq(<html>\n);
    push @htmlBase, qq(\n);
    push @htmlBase, qq(<head>\n);
    push @htmlBase, qq(<meta http-equiv="Content-Language" content="en-us">\n);

本质上,我如何仅将以“push”开头的行从我当前的 perl 文件复制到一个新文件中?提前致谢。

【问题讨论】:

  • 将子例程复制到另一个文件中并添加代码以调用该子例程并打印两个数组。运行新文件。

标签: html file perl


【解决方案1】:

如果您使用的是类 unix 操作系统,请尝试使用 grep。比如:

$ grep 'push' myfile.pl | grep -Po '(?<=qq\().*(?=\);)' >Newfile.html

第一个 grep 只是抓取带有“push”的行。第二个 grep 打开 Perl RE 模式(-P)并且只返回匹配的结果。查询有两部分:(?&lt;=qq\() 匹配文本之前的“qq(”(但不包含在结果中)和 (?=);) 查找最后一个“);”就行了。

这将不匹配多行引号,并且输出还将包括转义,例如换行符的 \n。

【讨论】:

    【解决方案2】:

    使用 perl grep 文件:

    perl -lne'm/push.+qq\((.+)?(\\n)\);/ && print $1' source.pl > target.html
    

    对于您显示的输出,此单行将起作用。

    如果您的源脚本更复杂,例如多行语句和嵌入变量,那么您需要编写一些临时代码来调用getTable,打印@htmlBase 的内容,然后将该输出保存到新文件中。

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      相关资源
      最近更新 更多