显示并删除所有字符 > ascii 代码 127

显示并删除所有字符 > ascii 代码 127

如何显示并删除文件中的所有字符 > ascii 代码 127?

文件是unicode 16bit

更新丹尼斯已经解决了这个问题,但是关于数字范围有一些有趣的讨论。

答案1

一种方法是将文件转换为十六进制数字,删除不需要的数字模式,然后再转换回来。

$ echo 'A Unicode character: [ñ]' | xxd -p | sed 's/c3b1//' | xxd -r -p
A Unicode character: []

您可以使用 AWK 或任何其他文本处理技术来代替sed。请小心歧义序列。

如果这符合您的想法,请告诉我。

答案2

回头再看这个问题

看来我最后用了其中的一句

(似乎是丹尼斯的正则表达式)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[8-9a-f][0-9a-f]|[0-9a-f][1-9a-f][0-9a-f][0-9a-f]|[1-9a-f]0[0-9a-f][0-9a-f])//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

或者这个(似乎是我的正则表达式)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3})//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

这是一些关于我如何通过一些测试解决问题的评论。

0080-00FF     00[89A-F][0-9A-F]
0100-0FFF     0[1-9A-F][0-9A-F]{2}
1000-FFFF     [1-9A-F][0-9A-F]{3}

这里有一些测试表明正则表达式有效。我在解决问题时将它们放入了我的问题中,但我应该将它们放入答案中。

总十六进制字符数 85

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "[0-9A-F]{4}" | wc -l
85

我想要的总数,72

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[0-7][0-F]" | wc -
l
72

我不想要的总数,13

$ xxd -p -u a.aa.txt | sed -r "s/[0-9A-F]{4}/\0 /g" | grep -oP '((?!00[0-7][0-9A-F])(?=[^ ]).){4}' | wc -l
13

我不想要的总数,13

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3}" | wc –l
13

相关内容