2014-02-27 94 views
0

我有以下批處理SED Linux命令恰好替換線

#! /bin/bash 
PATTERN1="MACRO" 
PATTERN2="HI" 
sed -e "s/${PATTERN1}/${PATTERN2}/g" config.conf 

因此,該文件config.conf的內容是

 
ABC 
    DEF 
    ERF MACRO 
    ERR 
MACRO 

因此,這個命令的輸出是:

 
ABC 
    DEF 
    ERF HI 
    ERR 
HI 

但所期望的輸出是

 
ABC 
    DEF 
    ERF MACRO 
    ERR 
HI 

換句話說,我只需要用每行完全匹配來替換模式,不要在同一行中包含空格或其他詞。

回答

3

添加^$到你想要做確切匹配

你的榜樣模式:你可以這樣做:

sed -e "s/^${PATTERN1}$/${PATTERN2}/g" ... 

或使用原來的sed線,修改PATTERN1

PATTERN1="^MACRO$" 
+0

答案很糟糕,因爲......? – Kent

+0

+1取消downvote –

+1

@FredrikPihl謝謝。我認爲答案適用於OP的輸入......不理解downvote。希望downvoter可以留下一些提示/評論,以便我可以學習。 – Kent

0

試試這個:

awk '$0==p {$0=r}8' p="${PATTERN1}" r="${PATTERN2}" file 
+1

我會引用shell變量部分。 – Kent

+0

@Kent謝謝,我已經完成了 – Jotne