如何使用sed通过灵活的键和值来更改我的配置文件?
我想在配置文件中搜索该表达式:“ central.database”。然后,我想将与“ central.database”关联的设置更改为“
SQLTEST”。
最初,配置文件的布局如下所示:
central.database = SQLFIRSTTEST
这是我希望sed更换后的外观:
central.database = SQLTEST
我正在bash脚本中执行此操作,欢迎提出任何建议,建议或替代解决方案!
(实际上,这两个central.database
和SQLTEST
来自bash的变量在这里。)
我当前的代码(第三次尝试):
sshRetValue=$(ssh -p "35903" -i $HOME/sshids/idrsa-1.old ${1} <<EOF sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
echo $?
EOF
)
错误信息:
Pseudo-terminal will not be allocated because stdin is not a terminal.sed: -e expression #1, char 58: unknown option to `s'
-bash: line 3: EOF: command not found
回答:
这是一个示例表达式:
sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg
如果要匹配其中/
的内容,可以使用另一个定界符:
sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg
或使用可变扩展:
VAL="SQLTEST"sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg
在您的示例中:
sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;
$ CENTRAL_DB_NAME前面有一个\ 1无效。而且,sed不会打印它的返回值。这是检查返回值的首选方法:
sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;sed_return_value=$?
最终通过管道传输到ssh(未经测试):
sed_return_value=$(ssh server <<EOF sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
echo $?
EOF
)
-i用于替换输入文件中的数据。否则,sed将写入stdout。
正则表达式是它们自己的领域。除非有某些特定的功能使您难以理解,否则不可能在stackoverflow答案中深入解释它们。
以上是 如何使用sed通过灵活的键和值来更改我的配置文件? 的全部内容, 来源链接: utcz.com/qa/407819.html