【发布时间】:2020-07-23 01:02:42
【问题描述】:
我在一个文件中有一个 uri 列表:
https://<pattern>.hostname.com/api/<pattern>
有时模式包含一个在路径部分有效但在主机名中无效的下划线。我希望将主机名部分中的下划线转换为连字符,但将路径部分单独保留。所以想要的是:replace '_' with '-' before "/api" 有效。
https://ab_c.hostname.com/api/ab_c 应该变成https://ab-c.hostname.com/api/ab_c
如何使用sed 执行此操作?此处回答了在匹配单个字符之前替换字符 Replace all Occurences of '.' with '_' before '=' using sed ,但我无法调整它以通过多个字符匹配来达到想要的效果。
【问题讨论】:
-
使用 GNU sed 的单行代码:
sed -E ':a; s|^([^/]*//[^/]*)_([^/]*)|\1-\2|; ta' file