sed - 搜索和替换多行

Die*_*ego 0 bash sed

我刚刚从一个老问题中学到了SED如何为单线工作.但现在我正在尝试为多行(php文件缩进)做同样的事情并且它不起作用.应该怎么做?

码:

if ( empty( $donot_dump ) ) {
                return false;
Run Code Online (Sandbox Code Playgroud)

替换为:

if ( empty( $donot_dump ) ) {
                return true;
Run Code Online (Sandbox Code Playgroud)

文件名:class-prompt.php

由于这是一个大文件,有返回false的TONS; 并返回true; 所以这就是为什么我不能让所有回报都是真实的,反之亦然.

Pes*_*The 5

sed '/if ( empty( $donot_dump ) )/ { N; s/false/true/ }' data
Run Code Online (Sandbox Code Playgroud)
  • /regex/ cmdcmd只有当行匹配时才会执行regex
  • { cmds } 是一组命令
  • N 命令将文件的下一行附加到模式空间
  • s/regex/replacement/替代regexreplacement

换句话说,这会sed检查您所需的if语句.如果找到它,它会在里面执行一组命令{ ... }.第一个命令N将下一行附加到模式空间,第二个命令s替换falsetrue.


此解决方案适用于GNUsed.如SigmaPiEpsilon的回答中所述,N此处不需要命令,请谨慎使用.我赞成使用它,n因为它为您提供了我认为可能会派上用场的选项.您可以在sed手册或本sed教程中阅读有关此内容的更多信息.