sed - 如何使用sed替换多行

标签 sed

对文件执行就地更新的正确语法是什么:

"redis"=>array(
    'enabled' => false,

"redis"=>array(
    'enabled' => true,

我已经尝试过类似的方法,但不起作用

sed -i "s/\"redis\"=>array(\n    'enabled' => false/\"redis\"=>array(\n    'enabled' => true/" input.php 

最佳答案

你可以使用

sed -i '/"redis"=>array($/{N;s/\('"'"'enabled'"'"' => \)false/\1true/}' file

请参阅online demo :

#!/bin/bash
s='"redis"=>array(
    '"'"'enabled'"'"' => false,'
sed '/"redis"=>array($/{N;s/\('"'"'enabled'"'"' => \)false/\1true/}' <<< "$s"

输出:

"redis"=>array(
    'enabled' => true,

这里,

  • /"redis"=>array($/ - 匹配以 "redis"=>array( string and
  • 结尾的行
  • {N;s/\('"'"'enabled'"'"' =>\)false/\1true/} - N 附加换行符char 并将下一行添加到模式空间,s/\('enabled' =>\)false/\1true/ 匹配并捕获到组 1 'enabled' => 子字符串,然后仅匹配 false,而 \1true 将匹配项替换为第 1 组值 + true 子字符串。

关于sed - 如何使用sed替换多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68185066/

相关文章:

regex - 在 sed 单行代码中用空格替换/删除 2 个字符

bash - 使用 sed 递归替换字符串

regex - 查找带有未终止双引号的行

linux - grep 或 awk 切割 2 条不同的线

linux - 查找与正则表达式的链接

linux - unix sed 命令匹配一个词

linux - 删除第一个匹配项

linux - 如何删除 BASH 中的一行?

bash - 无法匹配 JSON 输出中的模式

bash - 在 Bash 中按字母顺序排序