Sed

替換 txt 文件中的任何字母的 excipt 範圍

  • June 20, 2020

請我有一個 txt 文件,我想替換_除此字母範圍之外的任何內容[\0600-\06FF]

喜歡

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

不和我一起工作。

如果輸入以 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

引用自:https://unix.stackexchange.com/questions/593968