为什么这个sed命令替换行而不是追加到它?

时间:2014-10-07 11:43:35

标签: linux bash shell sed

我有一个包含以下行的文件:

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~'

2 个答案:

答案 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(但直接转到下一行,如果需要下一步操作则不行)

你的替换模板中有&,逃脱它。它意味着所有搜索模式内容'所以你复制了替换中的内容