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

Используйте содержимое файла для замены строки с помощью SED

Какова была бы команда sed для сценариев mac shell, которая заменила бы все итерации строки "fox" всем содержимым строки myFile.txt.

myFile.txt будет html-содержимым с разрывами строк и всеми типами символов. Пример:

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>

Спасибо!

РЕДАКТИРОВАТЬ 1

Это мой фактический код:

sed -i.bkp  '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file

Когда я запускаю его, я получаю:

sed in place editing only works for regular files. 

И в моих файлах Q заменяется тонны китайских символов (!). Bizarre!

4b9b3361

Ответ 1

Вы можете использовать команду r. Когда вы найдете "лису" на входе...

/fox/{

... замените его ничем...

    s/fox//g

... и прочитайте входной файл:

    r f.html
}

Если у вас есть файл, например:

$ cat file.txt
the
quick
brown
fox
jumps
over
the lazy dog
fox dog

результат:

$ sed '/fox/{
    s/fox//g
    r f.html
}' file.txt
the
quick
brown

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>
jumps
over
the lazy dog
 dog
    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>

EDIT: чтобы изменить обрабатываемый файл, просто передайте флаг -i в sed:

sed -i '/fox/{
    s/fox//g
    r f.html
}' file.txt

Некоторые версии sed (например, мои собственные) требуют, чтобы вы передавали расширение на флаг -i, который будет расширением файла резервной копии со старым содержимым файла:

sed -i.bkp '/fox/{
    s/fox//g
    r f.html
}' file.txt

И вот то же самое, что и один лайнер, который также совместим с Makefile

sed -i -e '/fox/{r f.html' -e 'd}'

Ответ 2

В конечном итоге то, с чем я пошел, намного проще, чем множество решений, которые я нашел в Интернете:

str=xxxx
sed -e "/$str/r FileB" -e "/$str/d" FileA

Поддерживает шаблонизацию следующим образом:

str=xxxx
sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify