LINUX.ORG.RU

Реализация замены определенной строки в файле на текст который хранится в переменной

 , , ,


0

1

Всем привет! Помогите с добавлением текста начиная с определенной строки в файл.

Допустим переменная:

text=$(cat<<EOF
param{
str1
str2
}
EOF
)

Как теперь этот текст переместить в конф файл в определенную строку? PS. Не судите строго в линуксе нубас..

sed '34s/^%/$(text)/' /etc/file 

Как я только не экранировал, максимум что получается, это появление в нужной мне строке $text или $(text) и тп, исходя из опытов. Не читает sed переменную..

Одинарные кавычки — литеральные строки, в них ничего не преобразовывается. Используй двойные.

И не $(text), а ${text}.

mord0d ★★★★★ ()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

Спасибо за помощь, но в двойных сразу ошибка,пишет sed:-e незавершенная команда `s’,вот команда:

text=$(cat<<EOF
param{
str1
str2
}
EOF
)
sed -i "/34s/^$/${text}/" /etc/file

Я перед тем как сюда обраться, перелопатил google, экспериментировал по-разному)) Но увы.. Мне нужно поместить содержимое переменной $text в 34 строку фала построчно, как он храниться.

dimon_0901 ()
Ответ на: комментарий от dimon_0901

Потому что нельзя многострок скормить sed как многострок.

sed -i "/34s/^$/param{\nstr1\nstr2\n}/" /etc/file

Для многострочной замены лучше подходит diff+patch.

Жди @vodz, он любит подобную наркоманию. ☺

mord0d ★★★★★ ()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от dimon_0901

Сработало!)) вот я ДОДО конечно=)) Изобразил сам себе проблемы, и героически их преодолеваю)))

Это у вас сработало только потому, что ваша «проблема» очень узкая. Нормальная проблема бы была, если заменить блок

param1 {
str3
str4
}
на ваш блок с str1 и str2. То есть когда замена строки, которую нашел человек, предварительно отформатировав этот текст для машинной замены в набор строк, в далее не годящийся для строчных утилит текст. Тем самым вы не решили проблему, а создали.

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.