如果字符串的一部分匹配,则sed字符串替换整个单词,但不影响字符串后的单词

时间:2019-01-07 18:41:02

标签: regex ubuntu sed pam

我有这行:

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”。

3 个答案:

答案 0 :(得分:2)

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

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

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

输出:

password requisite pam_cracklib.so difok=8 abcd

答案 1 :(得分:1)

我可能会这样:

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

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

答案 2 :(得分: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