2012-06-27 62 views
1

我有一個XML文件,我需要修改:試圖修改與shell腳本文件 - 與/斌/ EX

... 
</web-app> 

我想這行之前,添加一些文字。我試着用簡單的文字,它工作正常(我用/斌/ EX):

s/<\/web-app/test &/ 

所以我得到了我想要的:

... 
test </web-app> 

但真正的文字我需要插入是:

<error-page> 
<error-code>400</error-code> 
<location>/error.html</location> 
</error-page> 

我應該如何處理?我試圖創建變量,像

STR='<error-page> 
<error-code>400</error-code> 
<location>/error.html</location> 
</error-page>' 

,並用它

s/<\/web-app/"$STR" &/ 

,但結果不正確。我是否錯誤地定義了var?多線可以有這樣的變種嗎?我怎樣才能插入所有這些行? sed可以做得更簡單嗎?

+0

'sed「s @

回答

2

有兩個問題。一,你的字符串包含'/'字符,所以你應該使用不同的分隔符。二,換行符有問題。你可以這樣做:

$ STR2=$(echo "$STR" | sed 's/$/\\n/' | tr -d '\n') 
$ sed "[email protected]</[email protected]$STR2 &@" 

分配給STR2簡單地替換所有換行符與\n,並在bash的作品。在zsh中,一些分詞正在發生,使得STR2與STR相同。

1

原油,但有效:

sed '/<\/web-app>/i<error-page>\n<error-code>400</errorcode>\n<location>/error.html</location>\n</error-page>' filename 
2

您可以嘗試

/bin/ex your.xml << EDIT 
/<\/web-app> 
i 
<error-page> 
<error-code>400</error-code> 
<location>/error.html</location> 
</error-page> 
. 
x 
EDIT 
+0

什麼是「。」用來?退出文字輸入模式? – Francheska

+0

對,就是這樣 – pizza

1

的問題是,STR包含換行符這ed會解釋,由於命令。我建議把的STR內容到一個文件中,並使用r在讀它,例如:

echo -ne '/<\/web-app/-1r OTHER_FILE\nw\n' | ed -s FILE_TO_MODIFY 
0

這可能會爲你工作:

STR='<error-page>\ 
<error-code>400</error-code>\ 
<location>/error.html</location>\ 
</error-page>' 
echo -e '...\n</web-app>\n...' | sed '/<\/web-app>/i\'"$STR" 
... 
<error-page> 
<error-code>400</error-code> 
<location>/error.html</location> 
</error-page> 
</web-app> 
... 

到位,編輯文件:

sed -i '/<\/web-app>/i\'"$STR" file