【问题标题】:How to add text with sed at the end-of-line minus 1 position如何在行尾减去 1 位置添加带有 sed 的文本
【发布时间】:2020-10-05 11:38:04
【问题描述】:

我想在输入文件中以resourceFilters: 开头的行的最后一个字符之前添加文本[*,test,*](该字符串前面可以有任意数量的空格)。

这行的一个例子如下

resourceFilters: '[Event,*,*][*,kube-system,*][*,kube-public,*][*,kube-node-lease,*][Node,*,*][APIService,*,*][TokenReview,*,*][SubjectAccessReview,*,*][Binding,*,*][ReplicaSet,*,*]'

会变成这样:

resourceFilters: '[Event,*,*][*,kube-system,*][*,kube-public,*][*,kube-node-lease,*][Node,*,*][APIService,*,*][TokenReview,*,*][SubjectAccessReview,*,*][Binding,*,*][ReplicaSet,*,*][*,test,*]'

【问题讨论】:

    标签: linux shell sed


    【解决方案1】:
    sed "/^ *resourceFilters: '/s/'$/[*,test,*]'/" your_file
    
    • 我已将 Sed 命令双引号,以便可以在其中使用单引号;
    • /^resourceFilters: '/ 使以下 substitution 命令仅作用于以 resourceFilters: ' 开头的行;
    • s/'$/[*,test,*]'/ 是在行尾匹配' ($) 的替换命令,并将[*, test,*]' 替换为它,有效地将[*,test,*] 插入到' 之前。

    【讨论】:

      【解决方案2】:

      这可能对你有用(GNU sed):

      sed -E 's/^(\s*resourceFilters:.*)(.)$/\1[*,test,*]\2/' file
      

      匹配包含resourceFilters: 的行并在该行的最后一个字符之前插入[*,test,*]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        相关资源
        最近更新 更多