Linux 文件中注释/取消注释行的Bash脚本

Linux 文件中注释/取消注释行的Bash脚本,linux,bash,shell,Linux,Bash,Shell,我在Linux中有一个标准的文本配置文件(Fedora20)。大多数行应始终适用,但少数行需要“打开”(未注释)和“关闭”,具体取决于文件所在的计算机。因此,该文件如下所示: ; configuration file parameter1 = a parameter2 = b optparameter1 = z ; only applies to %%machine-1%% ; optparameter1 = x ; only applies to %%machine-2%

我在Linux中有一个标准的文本配置文件(Fedora20)。大多数行应始终适用,但少数行需要“打开”(未注释)和“关闭”,具体取决于文件所在的计算机。因此,该文件如下所示:

 ; configuration file
 parameter1 = a
 parameter2 = b
 optparameter1 = z     ; only applies to %%machine-1%%
 ; optparameter1 = x   ; only applies to %%machine-2%%
 parameter3 = c
 ; optparameter2 = x   ; only applies to %%machine-2%%
 optparameter2 = f     ; only applies to %%machine-1%%  
./scriptname machine-2 machine-1 configurationFileName.conf
我想做的是运行一个脚本,根据命令行参数更改文件(或复制文件),改变行的注释。e、 g

 ./scriptname -u machine-2 -c machine-1 configurationFileName.conf
这将导致在结束注释中包含%%machine-2%%的所有行被取消注释(当然,保留tact中的结束注释),并且在结束注释中包含%%machine-1%%的所有行被注释

有什么建议吗?谢谢。

  • 为machine1启用配置(并为machine2禁用配置):

  • 为machine2启用配置(并为machine1禁用配置):


请小心,因为“
-i
”sed选项将直接修改“configurationFileName.conf”文件。

以下脚本将允许您“打开”和“关闭”特定行。在您的情况下,它将“关闭”包含machine-2的所有行,并“打开”包含machine-1的行。脚本如下:

comm=$1
uncomm=$2
filename=$3
sed -i -e "/$comm/s/^;*/;/" $filename
sed -i -e "/$uncomm/s/^;//" $filename
您可以这样运行它:

 ; configuration file
 parameter1 = a
 parameter2 = b
 optparameter1 = z     ; only applies to %%machine-1%%
 ; optparameter1 = x   ; only applies to %%machine-2%%
 parameter3 = c
 ; optparameter2 = x   ; only applies to %%machine-2%%
 optparameter2 = f     ; only applies to %%machine-1%%  
./scriptname machine-2 machine-1 configurationFileName.conf

第一个sed命令将分号(;)添加到包含变量$match的行中,如果该行已注释,则保留原样。第二个从行首删除分号

你什么都没试过?你碰到什么问题了?你试过使用sed吗?我想sed可能是答案,但我不知道如何让它工作。当我在过去使用sed时,它非常基本。你能推荐一下语法吗?这个文件使用分号
作为注释标记,而不是散列
。我明白了,谢谢。太好了。正是我想要的。谢谢