【问题标题】:sed command not searching for string correctly and replacingsed 命令未正确搜索字符串并替换
【发布时间】:2021-07-08 18:17:42
【问题描述】:

我目前正在为一个项目部署一个新的 webapp (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 上停止而不是使用逗号?

【问题讨论】:

  • 也许sed -i 's/worker\.list=.*/worker.list=GMA,ETL,common-resource,GAA,authzmanager,Launch,jkstatus/' ${INSTALL_BASE}/${APACHE_DIR}/conf/jk/workers.properties 可以吗?
  • 嘿 Wiktor 对不起一件事。因此,它正在编辑整个文件并将 GAA、Launch 等添加到所有“工作人员”。我不希望它编辑整个文件。就这一行。有什么想法吗?
  • 你的意思是,只编辑第一次出现?
  • 在我放入用户数据之前,我只是在一个 .txt 文件中进行测试,所以它可能只是一个 .txt 文件。看起来它只是删除所有空格。这可能只是记事本表现得很有趣。似乎当我运行该命令时,它会取出所有空格。这在workers.properties 文件中的行为方式是否相同?

标签: linux apache tomcat sed


【解决方案1】:

您可以使用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/ 将只删除文件中的第一个匹配项。

【讨论】:

  • 上述 cmets 中的解决方案解决了这个问题。谢谢。
  • @dill03 我添加了两个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2017-09-17
  • 2018-12-05
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多