1

変更する必要のあるxmlファイルがあります。

...
</web-app>

この行の前にテキストを追加したいと思います。単純なテキストを試してみましたが、正常に機能します(/ bin / 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を間違って定義しますか?multinelinesでそのようなvarを持つことは可能ですか?これらすべての行を前に挿入するにはどうすればよいですか?sedでもっと簡単にできますか?

4

5 に答える 5

2

2つの問題があります。1つは、文字列に「/」文字が含まれているため、別の区切り文字を使用する必要があります。2つ目は、改行に問題があることです。あなたができること:

 $ STR2=$( echo "$STR" | sed 's/$/\\n/' | tr -d '\n' )
 $ sed "s@</web-app@$STR2 &@" 

STR2への割り当ては、すべての改行を単に置き換え\n、bashで機能します。zshでは、STR2をSTRと同じにする単語分割が発生しています。

于 2012-06-27T18:17:18.580 に答える
2

あなたが試すことができます

/bin/ex your.xml << EDIT
/<\/web-app>
i
<error-page>
<error-code>400</error-code>
<location>/error.html</location>
</error-page>
.
x
EDIT
于 2012-06-27T18:25:11.277 に答える
1

粗野だが効果的:

sed '/<\/web-app>/i<error-page>\n<error-code>400</errorcode>\n<location>/error.html</location>\n</error-page>' filename
于 2012-06-27T17:57:59.923 に答える
1

問題は、それをコマンドとして解釈するSTR改行が含まれていることです。edのコンテンツをSTRファイルに入れて、rそれを読み込んで使用することをお勧めします。例:

echo -ne '/<\/web-app/-1r OTHER_FILE\nw\n' | ed -s FILE_TO_MODIFY
于 2012-06-27T18:38:11.820 に答える
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
于 2012-06-28T05:12:22.697 に答える