Linux 如何使用sed替换文本文件中声明的变量值

Linux 如何使用sed替换文本文件中声明的变量值,linux,bash,Linux,Bash,我想编辑/etc/environment文件,将MY\u变量从VALUE\u 01更改为VALUE\u 02 以下是/etc/environment文件的上下文: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" JAVA_HOME="/usr/java/jdk8/jdk1.8.0_92-1" MY_VARIABLE=VALUE_01 理想情况下,我希望使用sed命令来编辑它,例如(请注意,它不是工作命令): sed-e'MY_V

我想编辑
/etc/environment
文件,将
MY\u变量
VALUE\u 01
更改为
VALUE\u 02

以下是
/etc/environment
文件的上下文:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
JAVA_HOME="/usr/java/jdk8/jdk1.8.0_92-1"
MY_VARIABLE=VALUE_01
理想情况下,我希望使用
sed
命令来编辑它,例如(请注意,它不是工作命令):

sed-e'MY_VARIABLE=VALUE_02'-i/etc/environment

我怎样才能做到呢

sed -- 's/MY_VARIABLE=.*/MY_VARIABLE=VALUE_02/' /etc/environment
检查是否正常后,添加
-i
选项:

sed -i -- 's/MY_VARIABLE=.*/MY_VARIABLE=VALUE_02/' /etc/environment
您可能需要根访问权限

检查是否正常后,添加
-i
选项:

sed -i -- 's/MY_VARIABLE=.*/MY_VARIABLE=VALUE_02/' /etc/environment

您可能需要root访问。

而不是尝试使用
sed-i
并希望您的
sed
版本实现该选项,并确定它是否需要强制参数(我感觉您没有像
linux
标签建议的那样使用GNU
sed
),只需使用
ed
编辑脚本中的文件即可

ed -s /etc/environment <<EOF
/^MY_VARIABLE=/c
MY_VARIABLE=VALUE_02
.
w
EOF

ed-s/etc/environment而不是试图使用
sed-i
并希望您的
sed
版本实现该选项,并确定它是否需要强制参数(我感觉您没有使用GNU
sed
,就像
linux
标签建议的那样),只需使用
ed
编辑脚本中的文件即可

ed -s /etc/environment <<EOF
/^MY_VARIABLE=/c
MY_VARIABLE=VALUE_02
.
w
EOF

ed-s/etc/environment我必须使用
sed-I-e
标志来使它工作。请更正您的答案,以便我们投票表决。谢谢不客气!等等,您确定需要
-e
标志吗?您有什么
sed
实现?使用
-i
标志,我将获得
sed:1:“/etc/environment”:命令c预期\后跟文本。我如何检查我有什么
sed
实现?哦,我想我明白了。。。可能与你的sed无关。这是一个不可能的巧合造成的。但在我解释之前,请先尝试一下
sed-I--'s/MY_VARIABLE=.*/MY_VARIABLE=VALUE_02/'/etc/environment
--
是一个POSIX构造,用于指示选项的结束。如果您不使用它,并且有一个特定的文件名(以
-
开头),则该实用程序可能会将其视为一个选项。例如,考虑<代码>触摸——一个“ VS <代码>触摸”-a“< /代码>。我必须使用<代码> SED-I-E< /COD>标志使其工作。请更正您的答案,以便我们投票表决。谢谢不客气!等等,您确定需要
-e
标志吗?您有什么
sed
实现?使用
-i
标志,我将获得
sed:1:“/etc/environment”:命令c预期\后跟文本。我如何检查我有什么
sed
实现?哦,我想我明白了。。。可能与你的sed无关。这是一个不可能的巧合造成的。但在我解释之前,请先尝试一下
sed-I--'s/MY_VARIABLE=.*/MY_VARIABLE=VALUE_02/'/etc/environment
--
是一个POSIX构造,用于指示选项的结束。如果您不使用它,并且有一个特定的文件名(以
-
开头),则该实用程序可能会将其视为一个选项。例如,考虑<代码>触摸——一个“<代码/代码vs代码>触摸-”-a“<代码>。