替换 txt 文件中的任何字母范围

替换 txt 文件中的任何字母范围

请我有一个 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

相关内容