在docker中使用sedreplacepath

我知道这可能是一个愚蠢的问题…我想从docker文件做一个docker工人。 问题是,当我使用docker run -it docker_name / bin / bash进入docker时,我没有命令行完成。 所以我做了这个https://docs.docker.com/machine/completion/ (仍然不工作),并希望这样做https://linuxconfig.org/tab-does-not-automatically-complete-docker-commands-解

事情是,我无法从泊坞窗文件中取代几行。 我想要像这样使用命令sed: RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrc RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrc RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrc但它不能替代包含path的行(我得到错误sed:-eexpression式#1,字符75:未终止的'命令)。

我也尝试了RUN sed -i 's+\# if [ -f \/usr\/share\/bash-compl+ if [ -f \/usr\/share\/bash-compl+g' /etc/bash.bashrc #if RUN sed -i 's+\# if [ -f \/usr\/share\/bash-compl+ if [ -f \/usr\/share\/bash-compl+g' /etc/bash.bashrc但得到了同样的结果。

在dockerfile中使用sed的好方法是什么,或者从dockerfile更新将来的docker中的文件有什么好方法?

————-编辑————

对不起,我忘了分享我的dockerfile。

第一行是以下内容:

 FROM nvidia/cuda:8.0-devel-ubuntu14.04 RUN apt-get update && apt-get install --yes --force-yes \ software-properties-common build-essential wget curl git pkg-config cmake-curses-gui vim nano doxygen libboost-all-dev libeigen3-dev libflann-dev freeglut3-dev libglew-dev # to get cmake3.0 RUN add-apt-repository ppa:george-edison55/cmake-3.x RUN apt-get update && apt-get install --yes --force-yes \ cmake RUN apt-get install --yes --force-yes \ g++ python # Intall some basic GUI tools RUN apt-get install --yes --force-yes \ cmake-qt-gui gnome-terminal 

我想编辑docker中的/etc/bash.bashrc文件,所以我做了:

 RUN sed -i 's+#if ! shopt -oq posix; then+if ! shopt -oq posix; then+g' /etc/bash.bashrc #this works RUN sed -i 's+\# if [ -f \/usr\/share\/bash-compl+ if [ -f \/usr\/share\/bash-compl+g' /etc/bash.bashrc #this does not work and provide the previous error 

's+# if \[ -f /usr/share/bash-compl+ if \[ -f /usr/share/bash-compl+g'应该parsing。

您需要将方括号[\[ 。 方括号允许在sed中对字符进行分组,所以它们不会与字面括号相匹配,除非被转义。

如果继续使用s+++而不是s///则不需要转义正斜杠。