2015-01-20 100 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