例えば:
sed 's/\u0091//g' file1
現在、16進数を取得してhexdump
に入れるには、次のようにsed
を実行する必要があります。
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
その後:
$ sed 's/\xe9\xa6\x91//g' file1
その構文を使用してください:
sed 's/馑//g' file1
またはエスケープされた形式で:
sed "s/$(echo -ne '\u9991')//g" file1
(古いバージョンのBashと一部のシェルはecho -e '\u9991'
を理解しないため、最初に確認してください。)
Perlはそれを行うことができます:
echo 汉典“馑”字的基本解释 | Perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
は、標準入力、出力、およびエラーに対してUTF-8をオンにします。
いくつかのバージョンのsed
はUnicodeをサポートしています:
奇妙だと思ったBSD sedの情報はありませんでしたが、Unicodeにも対応している確率は高いと思います。残念ながら、使用するエンコーディングをsed
に指示する標準的な方法はないため、それぞれが独自の方法でこれを行います。
これは私にとってはうまくいきます:
$ vim -nEs +'%s/\%u9991//g' +wq file1
それは私が望んでいるよりも少し落ち込んでいる。ここに完全な説明があります:
-n
vimスワップファイルを無効にする-E
Ex改良モード-s
サイレントモード+'%s/\%u9991//g'
置換コマンドを実行します+wq
保存して終了最近のバージョンのBASHでは、sed式の前後の引用符を省略すれば、BASHのエスケープ文字列を使用できます。ワイルドカードを個別に引用できるため、BASHによって解釈される可能性のあるsed式内のスペースまたはsed式の一部。
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
GNU sed(バージョン4.2.1):
$ echo -ne $'\u9991' | sed 's/\xe9\xa6\x91//g' | hexdump -C
$ echo -ne $'\u9991' | hexdump -C
00000000 e9 a6 91
(sed
の代替として、GNU awk
を使用することもできますが、必要ないようです。)