ファイルの文字列の置き換え

ファイルの文字列の置き換え

次のファイルがあります。

<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
  <string name="test" >- test</string>
  <string name="test" >test-test</string>
  <string name="test" >test - test</string>

en dashUnicodeの値に置き換えたいのですが、すべてではなくstringタグの1つに変更したいです。

別の正規表現を使用していくつかを実行しましたが、sed理解できません。その一つは

sed -i.bak "s/-[^-\<\>0-9]/\&#8211\;/g" strings.xml

出力は次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<!-&#8211;enerated by-->
  <string name="test" >&#8211;test</string>
  <string name="test2" >test&#8211;est</string>
  <string name="test3" >test &#8211;test</string>

私の問題は、私も交換することです空のスペースそして最初の文字2番目の単語のうち。私との経験regexはあまりありませんsed。何が間違っているのか説明してもらえますか?

注:私はOSXを使用しています。

ベストアンサー1

最も近い(for\Ks///r)を使用perlし、<string>タグがネストされていないとします。

perl -0777 -pi.bak -e's{<string.*?>\K.*?(?=</string>)}{$&=~s/-/&#8211;/rg}ges' file.xml
  • -0777:喫煙モード<string>:ファイル全体を一度に処理します(タグを複数行にわたって表示できるようにする)。
  • -psedモデル
  • -i.bak:拡張機能を使用した内部編集.bak(btw、ここでsedいくつかの実装に関するアイデアが出ました)
  • s{...}{...}ges:グローバル置換(g)。改行.文字(s)とも一致し、置換をperl実行するコード(e)として扱います。
  • <string.*?>\K.*?</string>:is 部分にタグ自体を含めず、from <string...>to と一致します。</string>マッチ\K定義するマッチセクションが始まり、(?=...)プレビュー演算子です。調査する存在しますが、一致</string>には含まれません)。
  • $&=~s/.../.../rg。交換してくださいマッチ部分( $&)。このrフラグは実際には変更されませんが、$&置き換えられた文字列を返します。

おすすめ記事