我有一个包含以下内容的文件:
y
我需要将其修改为
proxy.config.cluster.mc_group_addr 224.0.1.37
proxy.config.log.logging_enabled 3
proxy.config.log.squid_log_enabled 1
我尝试了各种sed命令,比如
'proxy.config.cluster.mc_group_addr' : '224.0.1.37'
'proxy.config.log.logging_enabled' : '3'
'proxy.config.log.squid_log_enabled' : '1'
但他们没有工作..
答案 0 :(得分:0)
让它发挥作用。
sed -r "s/^|$/'/g" records.config | sed "s/\s/': '/g"
这看起来很好。希望这是更好的方式。
答案 1 :(得分:0)
使用反向引用:
sed 's/^\(.*\) \(.*\)/'\''\1'\'': '\''\2'\''/' file
或周围的双引号:
sed "s/^\(.*\) \(.*\)/'\1': '\2'/" file
答案 2 :(得分:0)
试试这个 -
awk -v OFS=":" '{print v$1v,v$2v}' v="'" f
'proxy.config.cluster.mc_group_addr':'224.0.1.37'
'proxy.config.log.logging_enabled':'3'
'proxy.config.log.squid_log_enabled':'1'
答案 3 :(得分:0)
sed 解决方案:
sed -E "s/^([^ ]+) (.+)$/'\1': '\2'/" testfile
^([^ ]+)
- 将匹配行开头的空格以外的一系列字符
输出:
'proxy.config.cluster.mc_group_addr': '224.0.1.37'
'proxy.config.log.logging_enabled': '3'
'proxy.config.log.squid_log_enabled': '1'
awk 解决方案(没有空行):
awk 'BEGIN{FS=" "; ORS="\n";}{ if(NF) print "\47"$1"\47: \47"$2"\47"}' testfile
if(NF)
- 检查一行是否为空以执行下一个表达式
"\47"
- 指向单引号'
输出:
'proxy.config.cluster.mc_group_addr': '224.0.1.37'
'proxy.config.log.logging_enabled': '3'
'proxy.config.log.squid_log_enabled': '1'