Позволяет говорят, что у меня есть два нечто файлов и панель. Я хочу замену строка, "это - тест" в нечто с содержанием панели файла. Как я могу сделать это использование одного лайнера 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 раз.
Следующая команда должна работать на то, что Вы хотите:
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
.
Один путь:
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
Когда необходимо заменить всю строку содержанием файла, можно использовать r
для вставки файла и d
для удаления текущей строки:
sed -e "/regex/{r/path/to/file" -e "d}"