如何 grep 查找一系列 unicode 字符?

bar*_*lop 5 grep

如何 grep 查找一系列 unicode 字符?

\n

我见过一个角色的例子。如何用 unicode 值来 grep 字符?

\n

我对 shell 替换方法以外的方法感兴趣

\n

因为 shell 替换似乎有点有限,例如它似乎不适用于非图形 unicode 字符,例如 \\u80 的代码点。

\n

我可以让该方法在一定范围内工作,但仅限于一定程度,因为它不会覆盖像 \\u80 (unicode codepoint 80) 这样的非图形字符

\n
$ echo grep [$\'\\u41\'-$\'\\u45\']\ngrep [A-E]\n\n$ echo 4142434445|xxd -r -p\nABCDE\n\n$ echo 4142434445|xxd -r -p | grep [$\'\\u41\'-$\'\\u45\']\nABCDE\n
Run Code Online (Sandbox Code Playgroud)\n

\\u0080-\\uFFFF$ 方法在 shell 级别使用替换,因此无法从或向上查找字符\\u0080,因为如果 shell 无法显示字符,则它将无法工作。

\n

ugrep 可通过 debian 的 apt-get 获得,但不适用于我在 VPS 上的 ubuntu 版本。我还得再测试一下。

\n

注意 事实 证明,shell 替换方法确实适用于控制字符,因此甚至适用于一系列控制字符或任何 unicode 字符,毫无疑问 ugrep 也适用。最初,当我尝试使用 grep 进行 shell 替换时,我不知不觉地输入了错误的字节。例如echo 418042| xxd -r -p显示,A\xe2\x96\x92B所以我认为这很好用,我正在尝试 grep 。所以我将错误的数据传递给 grep 。80 不是 \\u80 的 utf-8。高位字符的回显例如 \xc2\xa3 清楚地表明它正在输出 utf-8。echo \xc2\xa3 | xxd -p显示c2a30a\xc2\xa3 的 c2a3 是 utf-8。当我输入正确的字节时,它可以工作,例如c280\\u80 甚至 echo $\'\\u80\'可以工作。此页面适合显示 utf-8 到 unicode 代码点的映射。https://www.utf8-chartable.de/

\n

虽然 shell 替换确实有效,但我很高兴我有一个答案,它可以执行 shell 替换之外的方法,因为有一个替代方案是好的。

\n

JJo*_*oao 5

在 gnu-grep 和类似的中,您可以使用 PCRE 选项-P并使用 \n\\x{HHHH}语法

\n
$ grep -o -P '[\\x{0410}-\\x{042F}]+' # same as: grep -o -P '[\xd0\x90-\xd0\xaf]+'\n\xd0\xb0\xd0\xb1\xd0\xb2\xd0\xb3\xd0\xb4\xd0\xb5\xd1\x91\xd0\xb6\xd0\xb7\xd0\xb8\xd0\xb9\xd0\xba\xd0\xbb\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xbf\xd1\x80\xd1\x81\xd1\x82\xd1\x83\xd1\x84\xd1\x85\xd1\x86\xd1\x87\xd1\x88\xd1\x89\xd1\x8a\xd1\x8b\xd1\x8c\xd1\x8d\xd1\x8e\xd1\x8f\xd0\x90\xd0\x91\xd0\x92\xd0\x93\xd0\x94\xd0\x95\n\n=> \xd0\x90\xd0\x91\xd0\x92\xd0\x93\xd0\x94\xd0\x95\n
Run Code Online (Sandbox Code Playgroud)\n