Подтвердить что ты не робот

Вставьте содержимое файла после определенного соответствия шаблону

Я хочу вставить содержимое файла в определенное соответствие шаблону. Ниже приведен пример: добавьте 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>
4b9b3361

Ответ 1

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

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

Это дает:

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

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

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