我有一个包含以下行的文件:
some.url=failover:(nio://localhost:12345)?maxAttempts=5&timeout=10000
我想用另一条线完全替换这一行:
some.url=failover:(nio://someserver.com:6789)?something=10&another=6
但是下面的sed命令附加到该行,而不是替换它,任何想法我做错了什么?
sed -i 's~^some.url=.*$~some.url=failover:(nio://someserver.com6789)?something=10&another=6~'
答案 0 :(得分:2)
您需要在替换部件中转义&
。因为它具有特殊含义(打印匹配的字符串)。
sed 's~^some\.url=.*$~some.url=failover:(nio://someserver.com6789)?something=10\&another=6~' file
示例:强>
$ echo 'some.url=failover:(nio://localhost:12345)?maxAttempts=5&timeout=10000' | sed 's~^some.url=.*$~some.url=failover:(nio://someserver.com6789)?something=10\&another=6~'
some.url=failover:(nio://someserver.com6789)?something=10&another=6
答案 1 :(得分:1)
sed -i '/^some.url=.*$/ c\
some.url=failover:(nio://someserver.com6789)?something=10&another=6'
# OR
sed -i 's~^some\.url=.*$~some.url=failover:(nio://someserver.com6789)?something=10\&another=6~'
如果更改整行,请使用c
(但直接转到下一行,如果需要下一步操作则不行)
你的替换模板中有&
,逃脱它。它意味着所有搜索模式内容'所以你复制了替换中的内容