2015-01-20 97 views
1

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

#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 

但它看起来没有工作。

谢谢。

回答

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=NOLOCK_AFTER_RETRIES=6#LOCK_AFTER_RETRIES=6

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

如果你想改变LOCK_AFTER_RETRIES=6变化#LOCK_AFTER_RETRIES=NO,尝试: 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 
+0

谢谢你,是的,这正是我所需要的东西。 – JavaRed 2015-01-20 19:11:21

+0

很酷。其实我编辑我的答案,以防您有不同的要求。 – qqibrow 2015-01-20 19:12:18

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 
0

试试这个:

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