我有以下文件:(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/