【发布时间】:2020-01-02 09:32:31
【问题描述】:
我提到了多个答案,但没有一个对我的问题有帮助,因此提出了一个新问题。 以下是详细信息:
echo $testPorts
output: - "4441:4441" - "5905:5900"
- 现在我需要用上面的替换 test.yml 文件中可用的端口
-
以与 test.yml 相同的格式输出。
Regex: (ports:)(\n.*\n.*) 需要在 test.yml 和 my 中用上述端口替换第二组
- 预计 yml 将是
version: '2'
services:
ports:
- "4441:4441"
- "5905:5900"
我花了这么多时间仍然无法找出解决方案。
我尝试过的命令:(它们都不起作用)
sed -E 's/(ports:)(\n.*\n.*)/\2 ${'testPorts'}/g' test.yml
sed -E 's/(ports:)(\n.*\n.*)/\2 $'testPorts'/g' test.yml
sed -r 也不起作用。
原始 test.yml:
version: '2'
services:
ports:
- "4444:4444"
- "5901:5900"
【问题讨论】:
-
你能显示
echo "$testPorts"的输出吗? sed 一次解析 一行,要在 sed 中读取下一行,请在 sed 中使用n或N命令。您是否希望ports后面只有两行需要替换,或者行数可能不同? -
@KamilCuk,输出为“4441:4441” - “5905:5900” 行数将保持 2 只是不会不同。
-
请编辑您的问题并在帖子中包含相关信息。换行符在 cmets 中不可见。 Sed 有由换行符终止的命令。如果您的
testPorts变量包含换行符,则需要使用另一种方法。可能确实如此,但您的echo $testPorts并没有说太多,因为它没有被引用。请在问题中包含相关信息。 -
你的引用是错误的。你需要这样引用:
's/(ports:)(\n.*\n.*)/\2 '"${testPorts}"'/g' -
@ceving,它给出了 sed: -e expression #1, char 24: unterminated `s' command