sed 命令没有正确搜索字符串并替换

sed command not searching for string correctly and replacing

我目前正在为一个项目部署一个新的网络应用程序 (GEM)。更新用户数据时,它没有正确搜索字符串并在 apache 的 workers.properties 文件中替换它。我用来执行此操作的当前脚本是:

sed -i "s/worker.list\=GMA,jkstatus/worker.list\=GMA,ETL,common-resource,GAA,authzmanager,Launch,jkstatus/g" ${INSTALL_BASE}/${APACHE_DIR}/conf/jk/workers.properties

workers.properties 中需要更改的当前代码行如下:

worker.list=GMA,ETL,common-resource,GAA,authzmanager,Launch,jkstatus

我想做的改变就是:

worker.list=GMA,ETL,common-resource,GAA,GEM,authzmanager,Launch,jkstatus

是不是搜索的有问题?它正在更改文件中的其他内容,因此它肯定能够访问 workers.properties。对此的任何帮助表示赞赏。

编辑: 我已经确认它不喜欢 GMA 之间的逗号,jkstatus 表示从 GMA 开始到 jkstatus 结束:

\=GMA,jkstatus/ 那么如何让 sed 在 jkstatus 上停止而不是使用逗号呢?

您可以使用 worker\.list=.*:

匹配 worker.list= 之后的任何文本
sed -i 's/worker\.list=.*/worker.list=GMA,ETL,common-resource,GAA,authzmanager,Launch,jkstatus/' ${INSTALL_BASE}/${APACHE_DIR}/conf/jk/workers.properties

要仅删除文件中的第一个匹配项,您可以使用

sed -i '0,/worker\.list=.*/s//worker.list=GMA,ETL,common-resource,GAA,authzmanager,Launch,jkstatus/' ${INSTALL_BASE}/${APACHE_DIR}/conf/jk/workers.properties

注意 0,/pattern/ 将仅删除文件中的第一个匹配项。