简体   繁体   English

使用 sed 或 awk 替换变量中的文本

[英]Replace a text in a variable using sed or awk

I have a variable with the value as below,我有一个变量,其值如下,

var1="heritage=external-dns,external-dns/owner=us-east-1:testapp-sandbox,external-dns/resource=ingress/monitoring/prometheus-operator-grafana"

var2=us-east-1:testapp-dev

I want to replace only the text between owner= and ,external-dns which is us-east-1:testapp-sandbox with the content from var2.我只想用 var2 中的内容替换owner=,external-dns之间的文本,即us-east-1:testapp-sandbox

So I am expecting output as below,所以我期待 output 如下,

var1_updated="heritage=external-dns,external-dns/owner=us-east-1:testapp-dev,external-dns/resource=ingress/monitoring/prometheus-operator-grafana"

I tried this, sed -i 's/(owner=).*(,external-dns)/\1us-east-1:testapp-dev\2/g' value.txt but its throwing me error as invalid command code v我试过这个, sed -i 's/(owner=).*(,external-dns)/\1us-east-1:testapp-dev\2/g' value.txt但它给我的错误是无效的命令代码v

Please let me know how to do this using sed or awk...请让我知道如何使用 sed 或 awk...

Your command is close to valid, just use extented regex with -E switch:您的命令接近有效,只需使用带有-E开关的扩展正则表达式

sed -E 's/(owner=).*(,external-dns)/\1us-east-1:testapp-dev\2/g' <<< "$var1"

Now using variable:现在使用变量:

sed -E "s/(owner=).*(,external-dns)/\1$var2\2/g" <<< "$var1"

Note that double quotes are mandatory here for shell to expand variables请注意,此处必须使用双引号 shell 来扩展变量

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM