2013-05-23 3 views
19

Я хочу вставить содержимое файла в определенное соответствие шаблону. Ниже приведен пример: добавьте file2.txt в file1.txt между <tag> и </tag>.Вставить содержимое файла после определенного соответствия шаблону

file1.txt

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

file2.txt

Hello world!! 

Я попытался следующие, и это не сработало.

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

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

Вы можете изменить '' для '', так как он печатает * до * ''. – fedorqui

+0

Я пробовал ''/<\/tag>/'и он работает !!! ура .. – Satish

ответ

36

Попробуйте следующую команду:

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

Это дает:

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

EDIT для объяснения, почему ваша команда не работает, как вы хотите: Команда r filename добавляет его содержимое в конце текущего цикла или при следующем вводе строка читается. И вы используете команду N, которая ничего не печатает, кроме как читает следующую строку, поэтому в это время печатается Hello world, после чего происходит нормальный поток строк.

В моем случае он считывает строку с <tag>, затем завершает цикл, поэтому печатает строку и после нее содержимое файла и продолжает чтение до конца.

+1

Как вы, ребята, такие потрясающие !! Большой!!! В чем проблема в моем синтаксисе? – Satish

+1

@Satish: Я отредактировал ответ, чтобы добавить объяснение. – Birei

+0

Есть ли способ обернуть контент с помощью CDATA? –

Смежные вопросы