2013-05-23 5 views
19

Desidero inserire il contenuto del file in corrispondenza di un modello specifico. Di seguito è riportato un esempio: aggiungi il contenuto file2.txt in file1.txt tra <tag> e </tag>.Inserire il contenuto di un file dopo una corrispondenza di modello specifica

file1.txt

<html> 
<body> 
<tag> 
</tag> 
</body> 
</html> 

file2.txt

Hello world!! 

ho provato dopo e non ha funzionato.

# sed "/\<tag\>/ { 
h 
r file2.txt 
g 
N 
}" file1.txt 

<html> 
<body> 
Hello World!! 
<tag> 
</tag> 
</body> 
</html> 
+1

È possibile modificare '' per '', poiché sta stampando * prima * ''. – fedorqui

+0

Ho provato ''/ <\/tag> /' e funziona !!! evviva .. – Satish

risposta

36

Prova seguente comando:

sed '/<tag>/ r file2.txt' file1.txt 

Produce:

<html> 
<body> 
<tag> 
Hello world 
</tag> 
</body> 
</html> 

EDIT per spiegazione del perché il vostro comando non funziona come si desidera: Il comando r filename aggiunge il suo contenuto alla fine del ciclo corrente o al prossimo input la linea è letta. E stai usando il comando N che non stampa nulla ma legge la riga successiva, quindi in quel momento viene stampato Hello world e successivamente il normale flusso di linee.

Nel mio caso, legge riga con <tag>, quindi termina ciclo, quindi stampa la riga e dopo di esso il contenuto del file e continua a leggere fino alla fine.

+1

Come ragazzi siete fantastici !! Grande!!! Qual'era il problema nella mia sintassi? – Satish

+1

@Satish: ho modificato la risposta per aggiungere una spiegazione. – Birei

+0

c'è un modo per racchiudere il contenuto con CDATA? –