次のファイルがあります。
<?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 dash
Unicodeの値に置き換えたいのですが、すべてではなくstring
タグの1つに変更したいです。
別の正規表現を使用していくつかを実行しましたが、sed
理解できません。その一つは
sed -i.bak "s/-[^-\<\>0-9]/\–\;/g" strings.xml
出力は次のとおりです
<?xml version="1.0" encoding="utf-8"?>
<!-–enerated by-->
<string name="test" >–test</string>
<string name="test2" >test–est</string>
<string name="test3" >test –test</string>
私の問題は、私も交換することです空のスペースそして最初の文字2番目の単語のうち。私との経験regex
はあまりありませんsed
。何が間違っているのか説明してもらえますか?
注:私はOSXを使用しています。
ベストアンサー1
最も近い(for\K
とs///r
)を使用perl
し、<string>
タグがネストされていないとします。
perl -0777 -pi.bak -e's{<string.*?>\K.*?(?=</string>)}{$&=~s/-/–/rg}ges' file.xml
-0777
:喫煙モード<string>
:ファイル全体を一度に処理します(タグを複数行にわたって表示できるようにする)。-p
:sed
モデル-i.bak
:拡張機能を使用した内部編集.bak
(btw、ここでsed
いくつかの実装に関するアイデアが出ました)s{...}{...}ges
:グローバル置換(g
)。改行.
文字(s
)とも一致し、置換をperl
実行するコード(e
)として扱います。<string.*?>\K.*?</string>
:is 部分にタグ自体を含めず、from<string...>
to と一致します。</string>
マッチ(\K
定義するマッチセクションが始まり、(?=...)
プレビュー演算子です。調査する存在しますが、一致</string>
には含まれません)。$&=~s/.../.../rg
。交換してくださいマッチ部分($&
)。このr
フラグは実際には変更されませんが、$&
置き換えられた文字列を返します。