我在 Linux (Fedora 20) 中有一个标准文本配置文件。大多数行应该始终适用,但有几行需要“打开”(未注释)和“关闭”,具体取决于文件所在的计算机。所以文件看起来像这样:
; 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 -u machine-2 -c machine-1 configurationFileName.conf
这将导致末尾注释中带有 %%machine-2%% 的所有行都被取消注释(当然,末尾注释保持原样),并且末尾注释中带有 %%machine-1%% 的所有行都被注释。
关于如何做到这一点有什么建议吗?谢谢。
最佳答案
以下脚本将允许您“打开”和“关闭”特定线路。在您的情况下,它将“关闭”所有包含 machine-2 的行并“打开”包含 machine-1 的行。脚本如下:
comm=$1
uncomm=$2
filename=$3
sed -i -e "/$comm/s/^;*/;/" $filename
sed -i -e "/$uncomm/s/^;//" $filename
你像这样运行它:
./scriptname machine-2 machine-1 configurationFileName.conf
第一个 sed 命令将分号 (;) 添加到包含变量 $match 的行,如果该行已被注释,则保持原样。第二个从行的开头删除分号。
关于linux - 用于注释/取消注释文件中行的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690816/