使用 sed 替换 bash 文件中的注释行失败

使用 sed 替换 bash 文件中的注释行失败

我正在尝试更新我的hadoop-env.sh文件,以便用新参数替换带注释的参数。我对整个概念很陌生,经过大量搜索后,我最终做了以下事情:

sed -i '/^export JAVA_HOME=/ s:.*:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_HOME/etc/hadoop/hadoop-env.sh

我尝试更新的文件部分如下所示:

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
# export JAVA_HOME=

期望的结果是:

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop

但是,当我捕获该hadoop-env.sh文件时,我得到的内容与以前相同。我必须提到我正在Dockerfile使用以下命令运行它:

RUN sed -i '/^export JAVA_HOME=/ s:.*:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_HOME/etc/hadoop/hadoop-env.sh

我不知道我可能会错过什么,非常感谢任何帮助。

答案1

这在评论中得到了回答。

改变:

sed -i '/^export JAVA_HOME=/ s:.*:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_HOME/etc/hadoop/hadoop-env.sh

至:(仅添加 2 个字符)

sed -i '/^# export JAVA_HOME=/ s:.*:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_HOME/etc/hadoop/hadoop-env.sh

相关内容