在kafka.properies文件中
more /home/kafka.properies
log.retention.hours=12
delete.topic.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
log.dir=/var/kafka/data1我们想要替换
log.dir=/var/kafka/data1或任何组合
log.dir=/var/kafka/data1,/var/kafka/data2, ...... 用$line
当:
echo $line
/var/kafka/data1,/var/kafka/data2,/var/kafka/data3,/var/kafka/data4,/var/kafka/data5,/var/kafka/data6,/var/kafka/data7,/var/kafka/data8因此,我们做了以下工作:
sed "s/^log.dir.*/\$line/g" /home/kafka.properies或
sed 's/^log.dir.*/$line/g' /home/kafka.properies但我们得到了
log.retention.hours=12
delete.topic.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
$line取而代之的是
log.retention.hours=12
delete.topic.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
log.dir=/var/kafka/data1,/var/kafka/data2,/var/kafka/data3,/var/kafka/data4,/var/kafka/data5,/var/kafka/data6,/var/kafka/data7,/var/kafka/data8 哪里是错的?,什么是正确的替代方法?(使用sed或perl一行或其他)
发布于 2022-01-18 13:55:49
你需要用
sed "s~^log\.dir.*~log.dir=$line~" /home/kafka.properies如果有任何领先的空白空间,您可以尝试
sed "s~^ *log\.dir.*~log.dir=$line~" /home/kafka.properies # only spaces
sed "s~^[[:space:]]*log\.dir.*~log.dir=$line~" /home/kafka.properies # any whitespaces
sed "s~^\s*log\.dir.*~log.dir=$line~" /home/kafka.properies # GNU sed only见在线演示
#!/bin/bash
s='log.retention.hours=12
delete.topic.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
log.dir=/var/kafka/data1'
line='/var/kafka/data1,/var/kafka/data2,/var/kafka/data3,/var/kafka/data4,/var/kafka/data5,/var/kafka/data6,/var/kafka/data7,/var/kafka/data8'
sed "s~^log\.dir.*~log.dir=$line~g" <<< "$s"Ouitput:
log.retention.hours=12
delete.topic.enable=true
leader.imbalance.check.interval.seconds=300
leader.imbalance.per.broker.percentage=10
log.dir=/var/kafka/data1,/var/kafka/data2,/var/kafka/data3,/var/kafka/data4,/var/kafka/data5,/var/kafka/data6,/var/kafka/data7,/var/kafka/data8注意:
~作为正则分隔符char,因为替换时包含/字符。. in log.dir以匹配文字.字符,否则,.将匹配任何单个字符。log.dir并使用了它,所以这个文本将从匹配中删除,您应该将它放回替换模式中。作为一个选项,您可以捕获log.dir并对RHS中的组值使用反向引用/占位符:
sed -E "s~^(log\.dir=).*~\1$line~" /home/kafka.properieshttps://stackoverflow.com/questions/70756664
复制相似问题