Замена строки использованием файла Sed

Позволяет говорят, что у меня есть два нечто файлов и панель. Я хочу замену строка, "это - тест" в нечто с содержанием панели файла. Как я могу сделать это использование одного лайнера sed?

Я использовал:

sed -i.bak 's/this is test/$(cat bar)\n/g' foo 

но строка заменяется литералом $(cat bar) вместо содержания bar. Я попытался использовать цитаты, но результат остается тем же.

Ответ Radu корректен, что касается кавычки. Теперь проблема, позволяет, говорят, что мой файл панели содержит:

this
is
a
test
file

Теперь, если я выполняю команду, она дает ошибку:

sed: выражение № 1-e, символ 9: незавершенная' команда

18 раз.

5
задан 23 October 2014 в 15:34

3 ответа

Следующая команда должна работать на то, что Вы хотите:

sed "s/this is test/$(cat bar)/" foo

, Если foo содержат более тогда одну строку, то можно использовать:

sed "s/this is test/$(sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' bar | tr -d '\n')/" foo

или:

sed -e '/this is a test/{r bar' -e 'd}' foo

Источник последних двух команд: шаблон Замены в файле с содержанием другого файла

Для внесения изменения в foo файл используйте sed -i.

6
ответ дан 17 November 2019 в 10:53

Один путь:

sed -e '/this is test/r bar' -e '/this is test/d' foo

Демонстрационный результат:

$ cat bar
12
23
$ cat foo
ab
this is test
cd
this is test
ef
$  sed -e '/this is test/r bar' -e '/this is test/d' foo
ab
12
23
cd
12
23
ef
5
ответ дан 17 November 2019 в 10:53

Когда необходимо заменить всю строку содержанием файла, можно использовать r для вставки файла и d для удаления текущей строки:

sed -e "/regex/{r/path/to/file" -e "d}"
0
ответ дан 17 November 2019 в 10:53

Другие вопросы по тегам:

Похожие вопросы: