在bash中将文本追加到匹配模式的开头

时间:2019-07-01 20:32:46

标签: bash sed

我有一个名为$ {sysmain_content}的文件。我试图将其放置在文件/var/tmp/sym_links.ini.$$中的[DWH_DBSPACES_LOCATION]模式之前。

所以我希望[DWH_DBSPACES_LOCATION]出现在下面文件中而不是替换字符串的开头。

`

;--------------------------------------------------------------------------
; DWH MAIN DBSPACE information
;--------------------------------------------------------------------------
[DWH_SYSTEM_MAIN]
DWH_SYSTEM_MAIN_1
DWH_SYSTEM_MAIN_2

[DWH_SYSTEM_MAIN_1]
Path=/eniq/database/dwh_main_dbspace/iq_system_main.iq
Lun_ID=
Type=fs
Size=30166
Link=
Disk=

[DWH_DBSPACES_LOCATION]

我在下面使用sed和r的尝试做了相反的事情,因为它首先打印文件内容。

sed "/^\[DWH_DBSPACES_LOCATION\]$/r ${sysmain_content}" /var/tmp/sym_links.ini.$$ > /var/tmp/sym_links.ini.$$.tmp1

2 个答案:

答案 0 :(得分:2)

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

sed '/^\[DWH_DBSPACES_LOCATION\]$/e cat '"${sysmain_content}"'' file

在打印输出行之前,请使用评估命令和cat文件。

答案 1 :(得分:1)

这对我有用:

sed -e your_file_name.ini '
/\[DWH_DBSPACES_LOCATION\]/ {
    r new_section.ini
    a\
\n[DWH_DBSPACES_LOCATION]
    d
}
'

在上面的示例中,带有您要插入的节的文件名为new_section.ini。您可能想要重命名。然后,它会像您一样使用r命令来插入此文件,它会替代[DWH_DBSPACES_LOCATION]的正常输出,并在使用a命令插入文件内容后将其追加。