【问题标题】:sed string replace entire word if part of string matches but do no affect words after the stringsed string 如果部分字符串匹配,则替换整个单词,但不影响字符串后面的单词
【发布时间】:2019-06-02 10:46:48
【问题描述】:

我有这条线:

password requisite pam_cracklib.so difok=355 abcd

如何将“difok=355”替换为“difok=8”?
值 355 可以是任何值。
基本上将“difok=X”替换为“difok=8”。

我试过了:

sed -i '/^#/!s/difok=.*/difok=8/g' temp

但这会替换 "difok=" 之后的任何文本
我试过了:

sed -i '/^#/!s/\bdifok=*\b/difok=8/g' temp

这给出了“difok=8355”。

【问题讨论】:

    标签: regex ubuntu sed pam


    【解决方案1】:

    sed:

    echo "password requisite pam_cracklib.so difok=355 abcd" |sed -E -n 's/(.* )(difok=[0-9]+)(.*)/\1difok=8\3/p'
    

    输出:

    password requisite pam_cracklib.so difok=8 abcd
    

    【讨论】:

      【解决方案2】:

      我可能会这样做:

      sed -i 's/difok=[^ ]*/difok=8/' temp
      

      替换命令的前半部分匹配difok=,后跟任意数量的非空格字符。

      【讨论】:

        【解决方案3】:

        使用 GNU sed 和扩展正则表达式 (-r):

        sed -r -i 's/(difok=)[0-9]+/\18/' file
        

        sed -r -i 's/(difok=)[^ ]+/\18/' file
        

        输出:

        密码必需 pam_cracklib.so difok=8 abcd

        【讨论】:

        猜你喜欢
        • 2011-03-26
        • 1970-01-01
        • 2021-10-29
        • 2017-05-15
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多