【问题标题】:Replace a text in a variable using sed or awk使用 sed 或 awk 替换变量中的文本
【发布时间】:2020-06-18 07:09:34
【问题描述】:

我有一个变量,其值如下,

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

我只想替换 owner=,external-dns 之间的文本,即 >us-east-1:testapp-sandbox 包含来自 var2 的内容。

所以我期待如下输出,

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

我试过这个,sed -i 's/(owner=).*(,external-dns)/\1us-east-1:testapp-dev\2/g' value.txt,但它给我的错误是无效的命令代码 v

请告诉我如何使用 sed 或 awk...

【问题讨论】:

  • 你搜索过/尝试过/实验过什么?
  • 我试过这个, sed -i 's/(owner=).*(,external-dns)/\1us-east-1:testapp-dev2/g' value.txt 但它抛出me 错误为无效的命令代码 v
  • 始终将您的(甚至失败的)尝试添加到您的原始帖子中
  • 我现在添加了我的尝试
  • invalid command code v 没有任何意义,似乎被截断了

标签: shell awk sed


【解决方案1】:

您的命令接近有效,只需使用 extented regex-E 开关:

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

现在使用变量:

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

注意这里必须用双引号来让shell扩展变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2018-08-05
    • 1970-01-01
    • 2017-12-20
    • 2018-07-02
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多