我想用一些开头和结尾模式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?
答案 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
在命令行上执行代码。