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