我需要在包含数千个PHP文件的项目中的每个catch
之后插入一个调试指令。
我想匹配模式
catch (
因此,在每个匹配模式之后,我想插入指令:
Reporter::send_exception($e);
我一直在尝试使用sed来实现这一目标,但我未能成功。
这是我正在使用的sed命令:
sed -e '/catch \(/{:a,n:\ba;i\Reporter::send_exception\(\$e\);\g' -e '}' RandomFile.php
非常感谢任何写这篇文章的帮助!
我在Stack Overflow中看到了同样问题的其他解决方案,但这些解决方案都没有奏效。
由于
修改
基本上我的文件看起来很像这样:
try {
do_something();
} catch ( AnyKindOfException $e) {
Reporter::send_exception($e); // Here's where I want to insert the line
// throws generic error page
}
这就是我想匹配catch \(*$
的原因
然后插入
Reporter::send_exception($e)
答案 0 :(得分:5)
您可以使用sed \a
命令执行此操作,该命令允许您追加该行。语法是:
sed '/PATTERN/ a\
Line which you want to append' filename
所以在你的情况下,它将是:
sed '/catch (/ a\
Reporter::send_exception($e);' filename
$ cat fff
adfadf
afdafd
catch (
dfsdf
sadswd
$ sed '/catch (/ a\
Reporter::send_exception($e);' fff
adfadf
afdafd
catch (
Reporter::send_exception($e);
dfsdf
sadswd
答案 1 :(得分:2)
我认为你想在包含catch (
的行之后插入文本。
在perl -p
下,$_
包含读取的行,并且将打印执行代码后包含$_
的内容。因此,我们只需在适当的时候将该行附加到$_
。
perl -pe'$_.=" Reporter::send_exception(\$e);\n" if /catch \(/'
或
perl -pe's/catch\(.*\n\K/ Reporter::send_exception(\$e);\n/'
用法:
perl -pe'...' file.in >file.out # From file to STDOUT
perl -pe'...' <file.in >file.out # From STDIN to STDOUT
perl -i~ -pe'...' file # In-place, with backup
perl -i -pe'...' file # In-place, without backup
答案 2 :(得分:1)
尝试:
sed 's/catch (/\0Reporter::send_exception($e);/g'
答案 3 :(得分:0)
我相信这应该可以解决问题:
sed -e 's/catch\s*(/catch (\n\tReporter::send_exception($e);/'