Ajouter des informations sous la ligne spécifique

Je veux savoir comment pourrais-je append des files contiennent des informations sous la ligne spécifique dans le file.

Par exemple, j'ai file1.txt avec les lignes suivantes:

 line 1 line 2 line 3 

et file2.txt a les informations que je veux append dans file1.txt sous spécifique à la line 2 .

Comment cela pourrait-il être fait?

Utilisez la command R [ead] de Sed

Vous pouvez utiliser la command sed de r pour lire dans un file. Par exemple, pour correspondre à la ligne par son numéro:

 sed '2 r /tmp/file2.txt' /tmp/file1.txt 

Ou si vous préférez correspondre à la ligne par son contenu:

 sed '/^line 2/ r /tmp/file2.txt' /tmp/file1.txt 

Il s'agit d'une command standard et ne repose sur aucune extension GNU, elle devrait donc fonctionner sur différentes implémentations sed.

Les commands ci-dessus impriment le résultat sur leur sortie standard. Si vous souhaitez modifier le file d'origine, ajoutez l'option -i juste après sed (cela fonctionnera sur Linux et Cygwin mais pas sur tous les systèmes unix).

Outre sed vous pouvez également le faire avec awk :

 awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt 

Cela va insert le contenu de file2.txt chaque fois que la line 2 est rencontrée.

Le 1 est le bloc par défaut { print $0 } .

Cela envoie sa sortie à la sortie standard, si vous voulez écraser file1.txt save la sortie dans un file temporaire et écraser:

 awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt > file1.txt.tmp mv file1.txt.tmp file1.txt 

modifier

Pour la correspondance de string fixe == serait plus fiable, par exemple pour correspondre à la string mentionnée utiliser cette conditionnelle:

 awk '1; $0 == "\"zend_extension=/usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so\"" { while(getline < "file2.txt") print }' file1.txt 

Notez que cela doit correspondre à la ligne entière.