使用sed替换文件中的文本

时间:2014-07-06 01:32:42

标签: shell sed

我正在尝试替换文件中的各种项目。我需要替换:/var/lib/cassandra/data。我如何处理/
我试过了:

sed -i -e 's/var\/lib\/cassandra\/data\/var\/lib\/storage\/cassandra\/data/g' /etc/cassandra/conf/cassandra.yaml  

结果:

sed: -e expression #1, char 65: unterminated `s' command

3 个答案:

答案 0 :(得分:0)

使用转义来转义那些字符串中的控制符号

sed 's/\//\\\//g'

(此示例将单/更改为\/

... 更改了sed的正则表达式分隔符。

此外,您似乎使用了反引号`而不是'

答案 1 :(得分:0)

sed -i -e 's/rpc_address: localhost/rpc_address: 0\.0\.0\.0/g’ /etc/cassandra/conf/cassandra.yaml

您已在全局标记g之后插入反引号而不是单引号。只需用单引号替换反引号即可。或者复制粘贴以下命令。而且也不需要-e标志。

sed -i 's/rpc_address: localhost/rpc_address: 0.0.0.0/g' /etc/cassandra/conf/cassandra.yaml

对于第二个你的命令,

sed -i 's~var\/lib\/cassandra\/data~var\/lib\/storage\/cassandra\/data~g' /etc/cassandra/conf/cassandra.yaml

我假设您尝试将var/lib/cassandra/data替换为var/lib/storage/cassandra/data。如果你想替换/var/lib/cassandra/data,那么你去吧,

sed -i 's~\/var\/lib\/cassandra\/data~\/var\/lib\/storage\/cassandra\/data~g' /etc/cassandra/conf/cassandra.yaml

答案 2 :(得分:0)

以下是使用/

处理sed的最佳方式
sed  -e -i 's|/var/lib/cassandra/data|/var/lib/storage/cassandra/data|g' /etc/cassandra/conf/cassandra.yaml 

您可以使用任何符号作为分隔符,只使用不属于您拥有的数据的符号。比如|