【发布时间】:2021-04-02 10:21:27
【问题描述】:
我有这个文本的文件:
mirrors:
docker.io:
endpoint:
- "http://registry:5000"
registry:5000:
endpoint:
- "http://registry:5000"
localhost:
endpoint:
- "http://registry:5000"
我需要在 POSIX shell 脚本(不是 bash)中用这个文本替换它:
mirrors:
docker.io:
endpoint:
- "http://docker.io"
registry:5000:
endpoint:
- "http://registry:5000"
localhost:
endpoint:
- "http://localhost"
应该在所有没有硬编码名称的地方动态地进行替换。我的意思是我们应该从第一行(“docker.io”、“registry:5000”、“localhost”)获取子字符串,并在第三行用它替换子字符串“registry:5000”。
我已经弄清楚了正则表达式,它将它分成 5 个组:(^ )([^ ]*)(:[^"]*"http:\/\/)([^"]*)(")
然后我尝试使用 sed 打印组 2 而不是 4,但这不起作用:sed -n 's/\(^ \)\([^ ]*\)\(:[^"]*"http:\/\/\)\([^"]*\)\("\)/\1\2\3\2\5/p'
请帮忙!
【问题讨论】:
标签: sed sh posix portability