linux - 用于注释/取消注释文件中行的 Bash 脚本

标签 linux bash shell

我在 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/

相关文章:

java - Unix: "ls"命令显示带 ? 的文件延长后

python - 源安装后启动 IPython shell 时出错

linux - Gnuplot - 改变背景颜色

Linux内存交换: why not always 0?

python - 如何在Python脚本执行时检查bash shell脚本的状态?

用于按列名称搜索文件(.csv)的linux cmd

java - 虚拟机中的本地主机地址

bash - bash -s 有什么作用?

linux - 自动执行命令的本地Linux用户无法关闭

python - 当 Nose 测试失败时 Jenkins 工作失败