【问题标题】:How to use Sed to replace text in a file?如何使用 Sed 替换文件中的文本?
【发布时间】:2022-11-14 03:42:43
【问题描述】:

我正在研究一个 bash 脚本,它从 api 调用中获取特定的输出并将其保存在一个变量中。我想使用 sed 将我的 appspec.yaml 中的 placeholder 字符串替换为该变量中存储的值。

我的 appspec.yaml 文件如下所示:-

  version: 0.0
    Resources:
      - TargetService:
          Type: AWS::ECS::Service
          Properties:
            TaskDefinition: "placeholder"
            LoadBalancerInfo:
              ContainerName: "new-nginx-app"
              ContainerPort: 80

这是我的 bash 脚本:-

#!/bin/bash
task_definition_arn=$(aws ecs describe-task-definition --task-definition task-def | grep "taskDefinitionArn" | awk '{print $2}' | sed 's/,*$//g')
echo $task_definition_arn
sed -i 's/placeholder/$(task_definition_arn)/g' appspec.yaml
cat appspec.yaml

运行此脚本会按预期返回值:-

"arn:aws:ecs:us-east-1:123456789:task-definition/task-def:13"

但是我的 appspec.yaml 文件中的文本没有按预期被替换。

version: 0.0
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "$(task_definition_arn)"
        LoadBalancerInfo:
          ContainerName: "new-nginx-app"
          ContainerPort: 80

任何帮助将不胜感激。谢谢你。

【问题讨论】:

    标签: bash


    【解决方案1】:

    对 sed 字符串使用双引号而不是单引号。使用单引号可以防止 bash 扩展变量。

    【讨论】:

    • 所以我做了sed -i "s/placeholder/$(task_definition_arn)/g" appspec.yaml,我得到了./script.sh: line 4: task_definition_arn: command not found
    猜你喜欢
    • 2011-08-26
    • 2022-10-21
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2017-12-20
    • 2017-12-03
    • 2013-04-30
    相关资源
    最近更新 更多