web-dev-qa-db-ja.com

Sed 2つの文字列を特殊文字に置き換えます

コードを含むXMLファイルがあり、それをxmllinkで使用するには、リンクを削除する必要があります。

以下を含むXMLファイル:

<xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PackingList xmlns="Link to somewhere#">
<morecode></morecode>

Sedの使用'sed s/PackingList.*\>/PackingList/g' xmlfile次の結果が得られます(2行目):

<PackingList#">

あるべきですが

<PackingList>

私は何が間違っているのですか?

3
Rocketman

3つの間違い:-

  • sedコマンドの最初の引用符は、sed自体の前ではなく、s/オプションの前に置く必要があります。これは入力エラーだと思います。
  • >文字は正規表現では特別な意味を持たないため、エスケープしないでください。シーケンス\>には特別な意味があります。つまり、単語の終わりであり、.*は「貪欲」であり、行の最後の単語の終わりに一致するため、#"が保持されます。
  • ソース>と一致する場合、これは置換される文字列に含まれるため、置換文字列にも含まれている必要があります。

したがって、編集コマンドは次のようになります。

sed 's/PackingList.*>/PackingList>/g' xmlfile

これはjherranのソリューションに似ていますが、最初のマッチングの試みを考慮に入れています。末尾の二重引用符に一致させる方が適切な場合があります。

sed 's/PackingList.*"/PackingList/g' xmlfile

貪欲さに頼りたくない(そして読みやすくしたくない)場合は、次を使用します。

sed 's/PackingList.*".*"/PackingList/g' xmlfile

同じ行にある後続のXMLタグは、上記のいずれかによって削除される可能性があることに注意してください。これを回避するには、次を使用します。

sed 's/PackingList[^>]*"[^>]*"/PackingList/g' xmlfile
2
AFH

この方法を試してください:

sed 's/PackingList.*/PackingList>/g' xmlfile
1
jherran