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

Как использовать sed для замены переменной файла конфигурации?

Я искал онлайн этот ответ и не могу найти его.

У меня есть файл конфигурации, который содержит:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

И я хочу изменить значение VAR5 с VALUE5 на VALUE10. К сожалению, я не знаю значение VALUE5, поэтому я не могу его искать. Поэтому в основном мне нужно использовать sed (или что-то еще), чтобы заменить значение VAR5 на любое значение, которое я хочу заменить.

Изменить:. Благодаря подтвержденному решению я смог использовать следующее в BASH для редактирования моего файла конфигурации, передав аргумент BASH script. Слэши были заменены запятыми, так как параметр, который я передаю в script, будет содержать слэши.

sed -i 's,^\(THISISMYVARIABLE=\).*,\1'THISISMYVALUE',' config.cfg

В моем файле содержится:

THISISMYVARIABLE=SOMEOLDVALUE

После запуска команды sed в bash

THISISMYVARIABLE=THISISMYVALUE
4b9b3361

Ответ 1

Вы можете попробовать это sed:

sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file

Он дает:

VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

Ответ 2

Даже если ответ добавлен в вопрос. Я потратил некоторое время на то, как это работает, я хотел бы добавить некоторые факты и мою версию ответа,

sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg

Объяснение:

  • В качестве основы sed 's/find_this/replace_with/' мы говорим sed, чтобы искать и заменять. Также помните, что есть несколько других разделителей, которые мы можем использовать вместо /. Здесь используется ,.
  • Здесь мы найдем строку, которая соответствует ^\(THISISMYVARIABLE[ ]*=\).*. Это означает, что мы группируем совпадение THISISMYVARIABLE[ ]*=. ([ ]* для покрытия, если после клавиши есть пробелы)
  • В разделе замены \1 используется обратная ссылка. Мы ссылаемся на первую группу в регулярном выражении, которое мы использовали для соответствия.

Ответ 3

Вы можете сказать:

sed '/^VAR5=/s/=.*/=VALUE10/' filename

Чтобы внести изменения в файл на месте, используйте параметр -i:

sed -i '/^VAR5=/s/=.*/=VALUE10/' filename

Ответ 4

sed '/\(^VAR5=\).*/ s//\1VALUE10/' YourFile

В разделе AIX/KSH

$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6

$ sed '/\(^VAR5=\).*/ s//\1VALUE10/' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

и для замены в файле

cat <> YourFile | sed '/\(^VAR5=\).*/ s//\1VALUE10/'

$ cat <> sample.txt | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6

Чтобы быть совместимым с POSIX (на sed, а не cat) (sed --posix на gnu sed и традиционно традиционным sed на не-linux-системе)

Ответ 5

Попробуйте выполнить

sed -r 's/^ (VAR5 =). */\ 1REPLACEMENT/'

Значение VAR5 будет заменено ЗАМЕНА.