bash - Ubuntu sed - 在 URL 中追加而不是替换
问题描述
我在 .yml 文件中有一个 URL,它的类型可以如下所示:
https://blog.com/public/
或者
https://blog.com/public/1534248704/static
我不知道上面 URL 中的数字。
我必须用生成的新随机数替换文件中的这些 url 模式,所以它看起来像:
https://blog.com/public/151234567/static
我正在使用的命令是:
sed -i 's, https://blog.com/public/, https://blog.com/public/151234567/static,g' config.yml
如果我只有一个没有数字的 URL(第一个 URL),它工作得很好,但是如果 URL 有一个数字,而不是获取替换的 URL,我会得到一些新数字附加到 URL 中的旧数字的东西以下:
https://blog.com/public/1534248704/static151234567/static
请让我知道如何完全替换它或我在这里做错的事情!
解决方案
我修改了示例以更简单的方式显示问题和解决方案,将其更改为适合实际用例留给用户
$ # here only 'cat' will be replaced
$ echo 'cat cater' | sed 's/cat/dog/g'
dog doger
$ # here both 'cat' and 'cater' will be replaced
$ # -E option to enable ERE, some sed versions would need -r instead of -E
$ echo 'cat cater' | sed -E 's/cat|cater/dog/g'
dog dog
$ # using group and quantifier to simplify regex
$ echo 'cat cater' | sed -E 's/cat(er)?/dog/g'
dog dog
$ # possible cases to take care of
$ echo 'concat catered' | sed -E 's/cat(er)?/dog/g'
condog doged
另一个问题/cat|cater/
是它取决于正则表达式引擎的实现。On GNU sed
,顺序无关紧要,最长的比赛将获胜,不确定其他实现......这是一个例子perl
$ echo 'cat cater' | perl -pe 's/cat|cater/dog/g'
dog doger
$ echo 'cat cater' | perl -pe 's/cater|cat/dog/g'
dog dog
$ echo 'cat cater' | perl -pe 's/cat(er)?/dog/g'
dog dog
因此,/cat(er)?/
当单行中有多个替换时,似乎更适合
推荐阅读
- javascript - 如何修复javascript中的属性未定义错误?
- sql - How to use pivot in SQL?
- oracle - 来自 19c 的 Oracle XE 18c impdp 转储
- python-3.x - 我需要合并 Pandas df (0.22) 以忽略某些多个连接键中的 NaN
- r - 如何在一个图中合并估计图和投影图?
- dart - MapEntry 类中的工厂构造函数有什么好处?
- ios - 我无法在头文件中导入 React BridgeModule
- wix - 如何通过 GPO 系统会话部署安装到 localappdata 的 MSI?
- java - Maven `dependency:purge-local-repository` 不会删除所有依赖项
- spring - 处理索引页的正确方法——Spring Boot