在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 一個襯里或其他)
uj5u.com熱心網友回復:
你需要使用
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"
輸出:
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 因為替換包含/字符.inlog.dir必須轉義以匹配文字.字符,否則.匹配任何單個字符- 您需要在 sed 命令中使用雙引號才能在其中使用變數。
- 由于您匹配
log.dir并使用它,該文本將從匹配中洗掉,您應該將其放回替換模式中。
作為一個選項,您可以捕獲log.dir并使用反向參考/占位符到 RHS 中的組值:
sed -E "s~^(log\.dir=).*~\1$line~" /home/kafka.properies
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414583.html
標籤:
上一篇:Spark:覆寫磁區檔案夾
