【问题标题】:sed over multiple lines to replace a single numbersed 多行替换单个数字
【发布时间】:2019-09-04 05:30:40
【问题描述】:

我是 sed 的新手,发现了一些针对这类问题的说明,但没有一个对我有用。

我有一个名为 var.tf 的文件,其中包含该条目:

variable "nb_instances" {
  description = "Specify the number of vm instances"
  default     = "3"
}

想把“3”换成“4”。

我试图创建那个 bash 脚本:


#!/usr/bin/env bash

sed 's/variable \"nb_instances\" {
  description = \"Specify the number of vm instances\"
  default     = \"3\"
}/variable \"nb_instances\" {
  description = \"Specify the number of vm instances\"
  default     = \"4\"
}/g' var.tf

但它不起作用并给出错误:

sed: 1: "s/variable \"nb_instanc ...": 未终止的替代模式

谁能帮我解决这个问题?我还尝试在新行中包含 \n。

【问题讨论】:

  • 即使你在模式中使用\n,它也不起作用:sed 默认在单独的行上运行。
  • 如果输入文件中只有一行包含default,可以使用sed '/default/ s/"3"/"4"/' var.tf,如果不行,请告诉我们原因
  • 感谢您的回答,有多个相同的行,“default”和“3”必须是通配符,不清楚会有什么数字。
  • 那么,有没有更简单的限定词?像variable "nb_instances" 是不同的吗?如果是这样,是否可以保证default 之后将成为第二行? sed -E '/variable "nb_instances"/ {n;n; s/"[0-9]+"/"4"/}' 适用于这种情况

标签: sed


【解决方案1】:

这可能对你有用(GNU sed):

sed '/^variable "nb_instances" {/{:a;n;s/"3"/"4"/;Ta}' file

关注以variable "nb_instances" { 开头的第一行,然后继续读取/打印行,直到字符串"3""4" 替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多