sed 中的正则表达式

Regular expression in sed

我尝试在 sed 命令中使用正则表达式。我尝试替换一个模式。我的模式是 /etc/security/policy.conf 文件中的一行。该值未知,应该是:

#LOCK_AFTER_RETRIES=NO 或 LOCK_AFTER_RETRIES=4(或此处的任何数字)。我想用值 LOCK_AFTER_RETRIES=6 替换找到的模式。所以我尝试了命令:

sed 's/#*LOCK_AFTER_RETRIES=[a-zA-Z0-9][a-zA-Z0-9]/LOCK_AFTER_RETRIES=6/g' ./policy.conf

但它看起来并不奏效。

谢谢。

这是你想要的吗?

sed -i 's/LOCK_AFTER_RETRIES=.*/LOCK_AFTER_RETRIES=6/g' filename

我这样测试并且有效:

echo "LOCK_AFTER_RETRIES=4\n#LOCK_AFTER_RETRIES=NO" | sed 's/LOCK_AFTER_RETRIES=.*/LOCK_AFTER_RETRIES=6/g'

[编辑]

看了别人的回答,不知道你是要把#LOCK_AFTER_RETRIES=NO换成LOCK_AFTER_RETRIES=6还是#LOCK_AFTER_RETRIES=6.

我上面的回答会把#LOCK_AFTER_RETRIES=NO改成#LOCK_AFTER_RETRIES=6

如果您想将 #LOCK_AFTER_RETRIES=NO 更改为 LOCK_AFTER_RETRIES=6,请尝试: sed -i 's/^#*LOCK_AFTER_RETRIES=.*/LOCK_AFTER_RETRIES=6/g' filename

总结:

echo "LOCK_AFTER_RETRIES=4\n#LOCK_AFTER_RETRIES=NO" | sed 's/LOCK_AFTER_RETRIES=.*/LOCK_AFTER_RETRIES=6/g'
LOCK_AFTER_RETRIES=6
#LOCK_AFTER_RETRIES=6
echo "LOCK_AFTER_RETRIES=4\n#LOCK_AFTER_RETRIES=NO" | sed 's/^#*LOCK_AFTER_RETRIES=.*/LOCK_AFTER_RETRIES=6/g'
LOCK_AFTER_RETRIES=6
LOCK_AFTER_RETRIES=6

试一试:

sed 's/^#\?\s*LOCK_AFTER_RETRIES=[^=]*/LOCK_AFTER_RETRIES=6/' 

用一些例子测试:

# LOCK_AFTER_RETRIES=NO
#LOCK_AFTER_RETRIES=NO
 LOCK_AFTER_RETRIES=4
LOCK_AFTER_RETRIES=4

kent$  sed 's/^#\?\s*LOCK_AFTER_RETRIES=[^=]*/LOCK_AFTER_RETRIES=6/' f
LOCK_AFTER_RETRIES=6
LOCK_AFTER_RETRIES=6
LOCK_AFTER_RETRIES=6
LOCK_AFTER_RETRIES=6

试试这个:

sed '/LOCK_AFTER_RETRIES/s/=.*/=6/g'  ./policy.conf