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