Ответ 1
Вы можете попробовать это sed:
sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file
Он дает:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Я искал онлайн этот ответ и не могу найти его.
У меня есть файл конфигурации, который содержит:
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
Вы можете попробовать это sed:
sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file
Он дает:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Даже если ответ добавлен в вопрос. Я потратил некоторое время на то, как это работает, я хотел бы добавить некоторые факты и мою версию ответа,
sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg
Объяснение:
sed 's/find_this/replace_with/'
мы говорим sed, чтобы искать и заменять. Также помните, что есть несколько других разделителей, которые мы можем использовать вместо /
. Здесь используется ,
.^\(THISISMYVARIABLE[ ]*=\).*
. Это означает, что мы группируем совпадение THISISMYVARIABLE[ ]*=
. ([ ]*
для покрытия, если после клавиши есть пробелы)\1
используется обратная ссылка. Мы ссылаемся на первую группу в регулярном выражении, которое мы использовали для соответствия.Вы можете сказать:
sed '/^VAR5=/s/=.*/=VALUE10/' filename
Чтобы внести изменения в файл на месте, используйте параметр -i
:
sed -i '/^VAR5=/s/=.*/=VALUE10/' filename
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-системе)
Попробуйте выполнить
sed -r 's/^ (VAR5 =). */\ 1REPLACEMENT/'
Значение VAR5 будет заменено ЗАМЕНА.