如何使用perl查找多行的模式

时间:2014-07-02 09:00:23

标签: perl sed

我想用一些开头和结尾模式grep沿着多行传播一些字符串

示例:

MediaHelper->fetchStrings( names => [  //Here new line may or many not be
**'ubp-firstrun_heading',
'firstrun_text',
'_firstrun-or-start_search',
'installed'**  //may end here also );
]);

使用perl或grap如何在此处获取列表4字符串开始模式为MediaHelper->fetchStrings(names => [,结束模式为);

或者其他任何建议使用其他命令,如grep或sed或awk?

3 个答案:

答案 0 :(得分:0)

试试这个:

sed -n '/MediaHelper->fetchStrings( names =>/,/);/ p' <yourfile>

或者,如果你想跳过分隔线,那么:

sed -n '/MediaHelper->fetchStrings( names =>/,/);/ {/MediaHelper->fetchStrings( names =>/b; /^);/b; p}' <yourfile>

答案 1 :(得分:0)

如果我理解你的问题,你需要匹配所有行中的所有字符串(而不仅仅是MediaHelper事物)。

如果是这种情况,则sed是正确的工具,因为它默认是面向行的。

在我们的例子中,如果你想匹配每一行中的字符串:

sed   "s/.*\('.*'\).*/\1/" <your_file>

希望有所帮助

编辑:为了更具描述性,首先我们需要匹配整行(这是第一行和最后一行。*)然后我们在括号中包含我们要打印的行的部分,在我们的例子中是一切单引号内。最后一个分隔符前面的数字1表示我们要打印第一个(在我们的例子中它也是最后一个)括号。

答案 2 :(得分:0)

只需以slurp模式而不是逐行处理文件:

perl -0777 -ne 'print $1 while m{MediaHelper->fetchStrings(names\s*=>\s*\[(.*?)\]}g' file

说明:

切换

  • -0777:Slurp模式而不是逐行
  • -n:为输入文件中的每一行创建一个while(<>){..}循环。
  • -e:告诉perl在命令行上执行代码。