36

å一部の入力をサニタイズし、デンマーク語の ' 'など、いくつかの文字を受け入れ可能な入力に置き換えたいと考えていますaa

/æ/ae/これは、/å/aa/、 、などの複数のステートメントを使用して簡単に実行/ø/oe/できますが、ツールの制限により、単一の正規表現でこれを実行できるようにしたいと考えています。

関連するすべてのケース ( ) をキャッチできますが、/[(æ)(ø)(å)(Æ)(Ø)(Å)]/置換は希望どおりに機能しません (ただし、おそらく完全に意図したとおりです)。

 $ temp="RødgrØd med flæsk"

 $ echo $temp
 RødgrØd med flæsk

 $ echo $temp | sed 's/[(æ)(ø)(å)(Æ)(Ø)(Å)]/(ae)(oe)(aa)(Ae)(Oe)(Aa)/g'
 R(ae)(oe)(aa)(Ae)(Oe)(Aa)dgr(ae)(oe)(aa)(Ae)(Oe)(Aa)d med fl(ae)(oe)(aa)(Ae)(Oe)(Aa)sk

(最初のエコー行は、エンコードの問題ではないことを示すためのものです)

余談ですが、ツールの問題は、 Sublime Text 2 スニペットでも同じ正規表現を使用したいということです。

私の正規表現ステートメントの何が問題なのかを識別できる人はいますか?

前もって感謝します。

4

3 に答える 3

61

それをいくつかのsedステートメントに分割し、次のように区切り;ます。

sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
于 2013-01-03T08:03:40.553 に答える
10

sed -e 's/Find/Replace/g;s/Find/Replace/g;[....];/Find/Replace/g'

あなたはトリックをします。

だから、あなたが必要なものに翻訳する

sed -e 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g'
于 2013-01-03T08:04:09.683 に答える
3

これはうまくいくかもしれません(GNU sed):

sed -r 's/$/\næaeøoeåaaÆAeØOeÅAa/;:a;s/([æøåÆØÅ])(.*\n.*\1(..))/\3\2/;ta;s/\n.*//' file

行末にルックアップ テーブルを追加し、すべてのキーが置き換えられるまでループしてからルックアップ テーブルを削除することで機能します。

于 2013-01-03T09:29:52.197 に答える