代码之家  ›  专栏  ›  技术社区  ›  John Smith

在特定行的末尾添加文本

  •  0
  • John Smith  · 技术社区  · 2 年前

    我有这样一个yaml文件:

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3
    

    我发现添加以下文字: # {"$imagepolicy": "xxx:xxx-test-pr333" } 在包含单词的行的末尾 image 出奇的难。

    我试过了 sed , awk ruby 但我不能直截了当地说,sed对所有这些特殊的字符和空格特别容易混淆。

    最终结果应该是:

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3 # {"$imagepolicy": "xxx:xxx-test-pr333" }
    

    谢谢你的提示。

    2 回复  |  直到 2 年前
        1
  •  2
  •   potong    2 年前

    这可能适合您(GNU-sed):

    sed 's/^\s*image:.*/&  # {"$imagepolicy": "xxx:xxx-test-pr333" }/' file
    

    匹配以空格开头的行 image: 和附加 # {"$imagepolicy": "xxx:xxx-test-pr333" }/ 对它。

        2
  •  2
  •   Barmar    2 年前

    这样可以做到:

    sed '/image/s/$/ # {"$imagepolicy": "xxx:xxx-test-pr333" }/' file.yaml
    

    地址 /image/ 匹配包含单词的行 image . regexp $ 匹配行尾,并将其替换为要添加的字符串,以便附加到行中。

        3
  •  1
  •   RARE Kpop Manifesto    2 年前

    awk 一个衬里解决方案-经过测试和确认 mawk 1.3.4 , gawk 5.1.1 macos nawk .

    不管有多少次 "image" 显示在一行内, OFS (现在设置为所需的填充文本)将仅追加 一旦 . 从那以后 FS 是整行吗 ^$ ,行只能有 NF 的值 0 (零字节行)或 1 (其他所有内容),因此现有的空格和制表符都不会被扭曲。

    • 另一个好处是,它的书写方式甚至可以用于 gawk -unicode模式可将文本安全地附加到纯二进制文件中的“行”(添加 RT 检查不以结尾的文件 \n ),如果有这种需要的话。

    输入

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3
     
    

    代码

    {m,n,g}awk 'NF+=/image/' FS='^$' OFS=' # {"$imagepolicy": "xxx:xxx-test-pr333" }'
    

    输出

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3 # {"$imagepolicy": "xxx:xxx-test-pr333" }
    
        4
  •  1
  •   Daweo    2 年前

    我会利用GNU AWK 对于以下方式的此任务,让文件。txt内容be

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3
    

    然后

    awk '{print $0 (/image/?" # {\"$imagepolicy\": \"xxx:xxx-test-pr333\" }":"")}' file.txt
    

    提供输出

    spec:
      values:
        image: xxxx.dkr.ecr.eu-west-1.amazonaws.com/xxxx:mypr-ij4uhtuh3 # {"$imagepolicy": "xxx:xxx-test-pr333" }
    

    说明:我使用了所谓的三元运算符( 条件 ? 值确实 : 值False )所以如果当前行包含 /image/ print 当前行的串联( $0 )和给定字符串,否则将当前行与空字符串串联( "" )这是不变的线。请注意 " (仅限 " )需要逃脱( \ )因为它们用于在GNU中分隔字符串 AWK公司 .

    (在gawk 4.2.1中测试)