2012-08-14 134 views
0

我和一個朋友正在開發一個項目,我們必須創建一個腳本,可以進入一個文件,並使用Sed替換某個表達式/單詞/字母的所有出現。它旨在通過多次測試來代替所有這些事件,我們不知道它們會是什麼,所以我們必須預測任何事情。我們在某些測試中遇到了麻煩,我們需要用循環替換'L'和'L'在不同文件中。那我的代碼是使用Sed的Shell腳本的問題

#!/bin/sh 
p1="$1" 

shift 

p2="$1" 

shift 

for file in "[email protected]" #for any file in the directory 
do 
    # A="$1" 

    #echo $A 
    #B="$2" 
    echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' > temporary #treat all special characters as plain text 
    A="`cat 'temporary'`" 
    rm temporary 
    echo "$p1" 
    echo "$file" 
    sed "s/$p1/$p2/g" "$file" > myFile.txt.updated #replace occurances 
    mv myFile.txt.updated "$file" 
    cat "$file" 
done 

我曾嘗試對包含不同的話,也「L *」但每當我測試了一下,刪除文件中的所有文本練習文件測試此。有人可以幫助我,我們希望儘快完成。謝謝

+0

歡迎來到堆棧溢出。如果這個問題涉及家庭作業,請添加作業標籤。 – pb2q 2012-08-14 17:15:35

回答

2

它看起來像你試圖將A設置爲一個版本p1與所有特殊字符轉義。但是,您以後使用p1而不是A。嘗試使用變量A,並嘗試設置它沒有臨時文件:

A=$(echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g') 
+0

謝謝SOOOO它工作得很好:)我們花了上週的時間研究這個問題。我非常感謝它 – user1598717 2012-08-14 23:02:58