2010-08-11 8 views
3

je le fichier suivant: (exemple.txt montrant vers le bas)texte sed ou perl + insérer entre deux lignes

je dois modifier le fichier, le principal problème consiste à ajouter du texte entre les deux lignes connues dans le fichier

première_ligne = ")"

second_line = "NIC Hr_Nic ("

Par exemple

Besoin d'ajouter ce qui suit:

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 

Entre

La première ligne de correspondance ")"

Et le

deuxième ligne de correspondance "carte réseau Hr_Nic ("

Comme décrit dans le fichier exemple.txt

Comment faire cela par sed ... (Si c'est difficile par sed il peut aussi possible avec perl)

remarque (nécessité sed d'obtenir deux arguments le premier argument est la première ligne de correspondance (première_ligne arg) le second argument est la deuxième ligne de correspondance (second_line arg)

de fichier exemple.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 

Exemple du fichier modifier après 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 
+0

Alors, quelle est la question? Ou voulez-vous que nous le codions pour vous? Qu'avez-vous jusqu'ici? – msw

+0

la cible principale est d'ajouter du texte entre deux lignes avec sed ou perl? – lidia

+0

Je sais comment ajouter test avant la ligne ou après la ligne Mais je ne sais pas comment ajouter du texte entre deux lignes appariées - :( – lidia

Répondre

0

pour cette solution:

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

J'utilise i pour l'insertion et une variable depuis la commande r (lire le fichier) fait un append après la ligne en cours. Vous pouvez également définir la variable comme ceci:

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

ou

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