Bash:使用参数替换配置文件中的路径

时间:2016-06-16 10:21:31

标签: linux bash elasticsearch

我有elasticsearch.yml文件。

我需要根据用户输入更新path.data和path.logs值。

我编写了.sh脚本,将路径作为参数并替换字符串,但它替换为空值。

在脚本下使用此

sed -i.bak -e 's/# path.data:.*/  path.data: $2 /' "$1"
sed -i.bak -e 's/# path.logs:.*/  path.logs: $3 /' "$1"

示例./updateconfig.sh /usr/local/elasticsearch/config/elasticsearch.yml /var/lib/elasticsearch /var/log/elasticsearch

我也试过双引号(“),但没有运气。

你可以帮我解决这个问题。

更新

尝试使用不同选项时添加示例和错误

示例

sed -i.bak -e "s/# path.data:.*/  path.data: $2 /" "$1"
sed -i.bak -e 's># path.data:.*>  path.data: $2 >' "$1"
sed -i.bak -e "'s># path.data:.*>  path.data: $2 >'" "$1"

错误

  

sed:-e表达式#1,字符32:s' sed: -e expression #1, char 1: unknown command:''

的未知选项

1 个答案:

答案 0 :(得分:1)

here以上的示例中使用sed进行了一些修改,如果变量名称在先前已知,我能够使这些命令有效: -

收到先前的论据后:$1$2$3

sed -i -e "s|^path.data.*|path.data:$2$1|g" -e "s|^path.logs.*|path.logs:$3$1|g" file

假设我的示例文件是虚拟的,如下所示,但具有实际的变量名称: -

path.data:/l/m/n
path.logs:/d/e/f

使用脚本,下面可以根据需要在OP中进行路径替换: -

#!/bin/bash

sed -i -e "s|^path.data.*|path.data:$2$1|g" -e "s|^path.logs.*|path.logs:$3$1|g" file

运行脚本时: -

$ ./script.sh /usr/local/elasticsearch/config/elasticsearch.yml /var/lib/elasticsearch /var/log/elasticsearch

现在验证原始文件的内容: -

path.data:/var/lib/elasticsearch/usr/local/elasticsearch/config/elasticsearch.yml
path.logs:/var/log/elasticsearch/usr/local/elasticsearch/config/elasticsearch.yml

感谢tripleee's建议,我现在可以进行就地替换!