erohin_d
@erohin_d
DevOps в ЛАНИТ

Как заменить строку на новую через bash?

Есть file
В нем текст:
"server" => [
{
"port" => "2200",
"ntf_port" => "22000",
"ip" => "10.10.10.10",
'role' => 'Client',
'cluster' => 'Cluster',
'ntf_sync' => true,
}


Надо после строки 'cluster' => 'Cluster', вставить "version" => '1.0' желательно в новой строке.

Основная проблема, что sed которым пробовал это сделать не хочет воспринимать эту кучу кавычек в тексте файла.

Есть предложения, как сделать?
  • Вопрос задан
  • 2360 просмотров
Решения вопроса 1
erohin_d
@erohin_d Автор вопроса
DevOps в ЛАНИТ
Итоговый вариант:
sed -i '/cluster/ s|$|\n "version" => '\''1.0'\''|' file
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
opium
@opium
Просто люблю качественно работать
В седе надо просто экранировать кавычки посмотрите мае по спецсимволам и слеш вас спасет
Ответ написан
Комментировать
abdulgalimov
@abdulgalimov
file=`cat file`
echo "------- file -------"
echo "$file"

template="'cluster' => 'Cluster',"
replaceTo="$template\\
'version' => '1.0'"

result=`echo "$file" | sed 's/'"$template"'/'"$replaceTo"'/g'`

echo "------- result -------"
echo "$result"


Результат выполнения:
------- file -------
"server" => [
{
"port" => "2200",
"ntf_port" => "22000",
"ip" => "10.10.10.10",
'role' => 'Client',
'cluster' => 'Cluster',
'ntf_sync' => true,
}
------- result -------
"server" => [
{
"port" => "2200",
"ntf_port" => "22000",
"ip" => "10.10.10.10",
'role' => 'Client',
'cluster' => 'Cluster',
'version' => '1.0',
'ntf_sync' => true,
}
Ответ написан
Комментировать
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Вот в одну строку:
sed '/Cluster/a \"version" => '\''1.0'\''\'
Ответ написан
@ShamblerR
sed -i 's/^\x27cluster/x27 \x3D\x3E/^\x27Cluster/x27 \x3D\x3E/g' index.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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