在sed中正则表达式

时间:2015-01-20 18:54:51

标签: regex bash sed solaris

我尝试在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

但它看起来并没有起作用。

感谢。

3 个答案:

答案 0 :(得分:2)

尝试一下:

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

答案 1 :(得分:1)

这是你想要的吗?

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

答案 2 :(得分:0)

试试这个:

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