GNU/Linux >> Linux の 問題 >  >> Linux

国際文字で sed が失敗する理由とその修正方法は?

sed ASCII 以外のテキストの設定がうまくいきません。ただし、 perl で (ほぼ) 同じコードを使用できます 希望する結果が得られます:

perl -pe 's/.*\| //' x

ファイルの入力エンコーディングが環境の優先エンコーディングと異なる場合、エラーが発生すると思います。

例:in はUTF-8です

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8 は安全に ISO-8859-1 として解釈できます。奇妙な文字が表示されますが、それ以外は問題ありません。

例:in ISO-8859-1です

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1 は UTF-8 として解釈できず、入力ファイルのデコードに失敗します。奇妙な一致は、おそらく sed が完全に失敗するのではなく、回復しようとするためです。

答えは Debian Lenny/Sid と sed 4.1.5 に基づいています。


Linux
  1. /usr と /var を別のパーティションまたはディスクに移動する方法

  2. find -exec mv {} ./target/ + が機能しないのはなぜですか?

  3. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

  1. 開いているファイルが多すぎるとプッシュ/フェッチでgitが失敗するのはなぜですか

  2. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  3. ホームでGnomeがドキュメント/ビデオ/を作成できないようにする方法は?

  1. 文字を再帰的にsedに置き換える方法は?

  2. RSA キーを使用してパスワードなしの ssh をセットアップする方法

  3. Linux が /dev/tty と /dev/tty0 を使用する方法