regex - sed - 替换几个连续的匹配模式的行

标签 regex linux bash sed

我正在尝试用我的文本替换文件中连续的两行。例如:
测试文件.rb

class Test
  def procedure
    nil
  end
end

我正在努力实现这一目标:
测试文件.rb

class Test
  def procedure
    nil
  finish
finish

所以我需要替换最后两行,但这不起作用:

sed -i 's/^\s\send\nend/  finish\nfinish/' testfile.rb

我知道它失败了,因为替换是逐行进行的。但是我该怎么做呢?

最佳答案

sed '/end$/N;//s/end/finish/g' testfile.rb

结果

class Test
  def procedure
    nil
  finish
finish
  • 我们只想查看可能都包含 end 的一对行,所以 仅当第一行以 end
  • 结尾时才在第二行读取
  • end 替换为 finish

关于regex - sed - 替换几个连续的匹配模式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16123102/

相关文章:

linux - 编写多个 sed 命令的更简洁的方法?

bash - 在 Windows 上开发但在 UNIX docker 容器上运行时出现行尾问题

java - 尝试创建一个正则表达式来从java中的字符串中提取网站地址,但无法正确执行

regex - HTML5 表单输入模式货币格式

sql - 从 SQL 中的字符串中提取子字符串

php - 扩展文件系统

c++ 如何从带有反斜杠的字符串中提取数字?

linux - 使用 Ncat 将数千行逐一发送到套接字服务器?

c++ - Ofstream 在 Linux 上写入空文件

bash - 如何为在 bash 中提示输入密码的命令提供密码?