【问题标题】:sed or perl + inserting text between two linessed 或 perl + 在两行之间插入文本
【发布时间】:2011-03-28 08:33:17
【问题描述】:

我有以下文件:(example.txt 显示出来)

我需要编辑文件,主要问题是在文件的两个已知行之间附加文本

first_line=")"

second_line="NIC Hr_Nic ("

例如

需要添加以下内容:

    haattr -add RVG StorageRVG -string
    haattr -add RVG StorageDG -string
    haattr -add RVG StorageHostIds -string
    haattr -delete RVG Primary
    haattr -delete RVG SRL
    haattr -delete RVG RLinks

之间

第一个匹配行“)”

还有

第二个匹配行“NIC Hr_Nic(”

如 example.txt 文件中所述

如何通过 sed 来做到这一点...(如果 sed 很难,perl 也可以)

remark(sed需要得到两个参数 第一个参数是第一个匹配行(first_line arg) 第二个参数是第二个匹配线(second_line arg)

example.txt 文件:

    group Hr_Grp (
    SystemList = { london1 = 0, london2 = 1 }
    AutoStartList = { london1, london2 }
    )

    NIC Hr_Nic (
            Device = qfe0
            )

    IP Hr_Ip(
            Device = qfe0
            Address = "1.1.1.1"         // Virtual IP
            )

    DiskGroup Hr_Dg(
            DiskGroup = hrdg
            )

    RVG Hr_Rvg (
            RVG = hr_rvg
            DiskGroup = hrdg
            )

    Hr_Rvg requires Hr_Dg
    Hr_Rvg requires Hr_Ip
    Hr_Ip requires Hr_Nic

sed 编辑后的文件示例:

    group Hr_Grp (
    SystemList = { london1 = 0, london2 = 1 }
    AutoStartList = { london1, london2 }
    )


    haattr -add RVG StorageRVG -string
    haattr -add RVG StorageDG -string
    haattr -add RVG StorageHostIds -string
    haattr -delete RVG Primary
    haattr -delete RVG SRL
    haattr -delete RVG RLinks



    NIC Hr_Nic (
            Device = qfe0
            )

    IP Hr_Ip(
            Device = qfe0
            Address = "1.1.1.1"         // Virtual IP
            )

    DiskGroup Hr_Dg(
            DiskGroup = hrdg
            )

    RVG Hr_Rvg (
            RVG = hr_rvg
            DiskGroup = hrdg
            )

    Hr_Rvg requires Hr_Dg
    Hr_Rvg requires Hr_Ip
    Hr_Ip requires Hr_Nic

【问题讨论】:

  • 那么问题是什么?还是您希望我们为您编写代码?到目前为止你有什么?
  • 主要目标是用sed或perl在两行之间追加文本?
  • 我知道如何在行前或行后附加测试但我不知道如何在两个匹配的行之间附加文本-:(
  • 这里的例子只是为了解决我的问题

标签: sed


【解决方案1】:

试试这个:

text=$(<file)
sed -e '/[[:blank:]]*)[[:blank:]]*/{:a;n;/NIC Hr_Nic (/i\' -e "$text" -e 'ba}'

我使用i 进行插入和一个变量,因为r(读取文件)命令在当前行之后进行了追加。你也可以这样设置变量:

read -d '' -r text<<EOF
haattr -add RVG StorageRVG -string
haattr -add RVG StorageDG -string
etc.
EOF

text="haattr -add RVG StorageRVG -string
haattr -add RVG StorageDG -string
etc."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多