我在Ubuntu 15中的/etc/bash.bashrc文件中有这些代码行。我如何才能取消对命令行的注释,而不破坏文件中的任何其他注释呢?
# enable bash completion in interactive shells
#if ! shopt -oq posix; then
# if [ -f /usr/share/bash-completion/bash_completion ]; then
# . /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi
#fi所需的输出应该如下所示:
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi请记住,这个文件中还有其他代码行,我不想搞砸,这应该由bash脚本自动完成。
发布于 2015-09-09 13:35:02
实际上,要求它做多配置文件bashrc的方法是非常错误的。您应该有几个不同的.bashrc文件,比如.bashrc_1、.bashrc_rc2,在这里您可以从基本的.bashrc文件中定义不同的需求,并在需要时对它们进行源化。
就这样。
发布于 2015-09-09 16:07:26
如果您知道您的块从哪一行开始(例如,第30行),则可以使用
sed '31,+6s/^.//' </etc/bash.bashrc >/etc/bash.bashrc-uncommented然后检查您的新文件bash.bashrc-uncommented,确保它在复制之前是正确的。
mv /etc/bash.bashrc-uncommented /etc/bash.bashrcsed语句所做的是查找第31行(块启动后的行),并将正则表达式应用到所要求的6行。
对于每一行,正则表达式查找行^的开头和下面的字符.,并将其替换为nothing (即删除它)。
</etc/...和>/etc/...正在告诉sed在哪里找到您的文件,以及在哪里发送命令的结果。
发布于 2015-09-09 16:12:44
我想出的这个提议的解决方案需要一些准备,但对我来说没问题。
首先,我将源文件复制到一个临时文件夹中。
cp /etc/bash.bashrc /var/ldt/bash.bashrc_modifed然后,我只编辑/var/ldt/bash.bashrc_ edit中所需的内容。
通过运行以下命令创建修补程序:
diff -u /etc/bash.bashrc /var/ldt/bash.bashrc_modifed > /var/ldt/bash.bashrc_patch现在,我只可以将更改应用到我想要的内容上。
patch /etc/bash.bashrc < /var/ldt/bash.bashrc_patchhttps://unix.stackexchange.com/questions/228562
复制相似问题