2013-05-23 14 views
19

Chcę wstawić zawartość pliku w określonym dopasowaniu wzorca. Oto przykład: dodaj file2.txt zawartość w file1.txt między <tag> i </tag>.Wstaw zawartość pliku po dopasowaniu określonego wzorca

file1.txt

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

file2.txt

Hello world!! 

Próbowałem następujące i to nie działa.

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

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

Możesz zmienić '' dla '', ponieważ jest to drukowanie * przed * ''. – fedorqui

+0

Próbowałem ''/<\/tag>/'i to działa !!! hurra .. – Satish

Odpowiedz

36

Spróbuj następujące polecenie:

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

To daje:

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

EDIT o wyjaśnienie, dlaczego komenda nie działa tak, jak chcesz: Komenda r filename dodaje swoją zawartość na końcu bieżącego cyklu lub po kolejnym wprowadzeniu linia jest przeczytana. Używasz polecenia N, które nie drukuje niczego, ale czyta następną linię, więc w tym czasie drukowane jest Hello world, a następnie normalny strumień linii.

W moim przypadku odczytuje wiersz z <tag>, a następnie kończy cykl, więc drukuje wiersz, a po nim treść pliku i kontynuuje czytanie do końca.

+1

Jak wam się podoba! Wspaniały!!! Jaki był problem w mojej składni? – Satish

+1

@Satish: Edytowałem odpowiedź, aby dodać wyjaśnienie. – Birei

+0

Czy istnieje sposób na zawijanie zawartości za pomocą CDATA? –