2012-12-20 246 views
1

我有以下幾點。我正在用克拉分隔文本文件中的值替換HTML中的一些字段。sed反斜槓

while IFS=^ read col1 col2 col3 col4 col5 col6 
do 
    echo $col1 
     echo "HtmlFor$col1" >> "SiteHtml.txt" 
     cat $FILENAME1 | sed "s/var1/$col1/" | sed "s/var2/$col2/"| sed "s/var3/$col3/" | sed "s/var4/$col4/" | sed "s/var5/$col5/" >> "SiteHtml.txt" 
     # | sed "s/var3/$col3/" | sed "s/var4/$col4/" | sed "s/var5/$col5/" | sed "s/var6/$col6/" 
done 

如果列中有反斜槓,我會得到一個錯誤。如果我嘗試用「/」來逃避它們,我仍然會遇到錯誤。它只適用於我刪除它們,我不能這樣做。 我在做什麼錯?

回答

0

您需要使用3個反斜槓來替換'sed'中的單個反斜槓。

實施例:

echo "\\" | sed "s/\\\/replace/" 

其原因是:第一\轉義第二\而作爲參數獲得通過,並且一旦通過了二進制參數內將是類似「S/\ /替換」現在當程序解析字符串時,第二個\會逃離第三個\以最終將字符串替換爲'\'。

可能有很多事情出錯,因爲\可以逃脫。其中一件事可能會困擾你。

  1. 你的「\」旁邊C,N或任何其他特殊字符具有意義,當我們在一個字符串
  2. 您可以使用它「\」是字符串$ COL1的最後一個字符當sed解析字符串時,它被忽略的變量。

我不能說很多沒有看到HTML被解析。

注意:這些不是唯一可能會給你一個錯誤的東西,但你有一個大致思路如何反斜槓在sed中影響字符串解析,希望你能找出解決方案。

PS:希望你也知道在雙引號之間傳遞的任何東西在被作爲參數傳遞之前被shell的值所取代,而在單引號之間傳遞的任何東西都不會被它的值所取代。

0

這裏是另一個版本:

echo "\\" | sed "s [\] replace "