2014-03-26 19 views
1

我正在寫一個shell腳本,我將在其中讀取一個文件,並將修改它。 多行中會出現一些字符串「ABC_1」。 只有當「OPQ_3」也出現在行中時,我需要用「XYZ_1」替換,否則不應該在行中進行修改。 請幫助我如何才能做替換,如果我讀一個文件比較線。替換文件只在一個固定的線

for FILE in $FILES 
do 
    echo $FILE 
    while read line 
    do 
    if grep -n "OPQ_3" $line 
     then 

     sed -i 's/ABC_1/XYZ_2/' 
    fi 

    done < $FILE 
done 

回答

3

你可以使用這個sed的:

sed -i '/OPQ_3\|OPQ_4/s/ABC_1/XYZ_2/' file 
+0

如何將OR條件放在這裏。例如,如果我有兩條線要用OPQ_3和OPQ_4修改一條? –

+0

感謝Anubhava ..這個解決方案是有幫助的。 :) –

+0

不客氣,很高興它解決了。 – anubhava

0

Anubhava有更好的答案。這裏是你如何把它寫在bash

for file in $FILES; do 
    echo "$file" 
    tmpfile=$(mktemp) 
    while IFS= read -r line; do 
     [[ $line == *OPQ_3* ]] && line=${line/ABC_1/XYZ_2/} 
     echo "$line" 
    done < "$file" > "$tmpfile" 
    mv "$tmpfile" "$file" 
done 

IFS= read -r line是從stdin讀取正是,而不會丟失任何空格或特殊字符的行的唯一途徑。

相關問題