txtファイルの文字範囲を置き換える

txtファイルの文字範囲を置き換える

txtファイルがありますが、_この文字範囲を除くすべての項目を置き換えたいと思います[\0600-\06FF]

良い

sed 's/^[\0600-\06FF]/_/g' < a. txt > b. txt

私と一緒に働きません。

答え1

入力がUTF-8でエンコードされ、システムにC.UTF-8ロケールがあり、シェルがzshの$'\uXXXX'演算子をサポートしている場合は、すべての文字を0x600 - 0x6ffの範囲外のUnicodeコードポイントに置き換えると、_次のことができます。従業員:

export LC_ALL=C.UTF-8
tr -c $'\u600-\u6ff' '[_*]' < a.txt > b.txt

trただし、GNUやbusyboxを含むマルチバイト文字をサポートしていない一部の実装では機能しません。あなたに良い幸運があるかもしれません:

export LC_ALL=C.UTF-8
sed $'s/[^\u600-\u6ff]/_/g' < a.txt > b.txt

改行文字に代わるものではありませんが(パイプできますtr '\n' _)。

または、次のものを使用できますperl

perl -C -pe 's/[^\x{600}-\x{6ff}]/_/g' < a.txt > b.txt

関連情報