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

标签 sed

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

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

first_line=")"

second_line="网卡 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 也可以)

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

最佳答案

试一试:

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

关于sed 或 perl + 在两行之间插入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458194/

相关文章:

bash - sed 替换 ' with\'

regex - 仅匹配单个数字 sed

linux - 有人可以建议一个快速的 oneliner 在 unix 中将 20111214 转换为 2011.12.14 吗?

linux - sed 字符串反转

shell - sed命令删除字符串的一部分

bash - 如何使用 sed、awk 或同时使用这两种工具从 dig 查询中提取 mx 记录

linux - 如何从文本文件中删除换行符?

regex - 如何使用sed用逗号替换空格?

awk - 使用 grep 从文件中匹配 python 多行表达式字符串?

macos - 为什么sed在OSX中添加新行?