请我有一个 txt 文件,我想替换_
除此范围的字母之外的任何内容[\0600-\06FF]
。
喜欢
sed 's/^[\0600-\06FF]/_/g' < a. txt > b. txt
不和我一起工作。
答案1
如果输入以 UTF-8 编码,并且您的系统具有 C.UTF-8 语言环境,并且您的 shell 支持 zsh 的$'\uXXXX'
运算符,则要将 Unicode 代码点在 0x600 - 0x6ff 范围之外的每个字符替换为_
,您可以执行以下操作:
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