我尝试在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
但它看起来并没有起作用。
感谢。
答案 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