sed或perl +在两行之间插入文本

时间:2010-08-11 12:29:06

标签: sed

我有以下文件:( 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来做到这一点...(如果它很困难,也可以使用perl)

备注(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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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."