如何 grep 查找一系列 unicode 字符?
\n我见过一个角色的例子。如何用 unicode 值来 grep 字符?
\n我对 shell 替换方法以外的方法感兴趣
\n因为 shell 替换似乎有点有限,例如它似乎不适用于非图形 unicode 字符,例如 \\u80 的代码点。
我可以让该方法在一定范围内工作,但仅限于一定程度,因为它不会覆盖像 \\u80 (unicode codepoint 80) 这样的非图形字符
$ 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 无法显示字符,则它将无法工作。
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/
虽然 shell 替换确实有效,但我很高兴我有一个答案,它可以执行 shell 替换之外的方法,因为有一个替代方案是好的。
\n在 gnu-grep 和类似的中,您可以使用 PCRE 选项-P
并使用 \n\\x{HHHH}
语法
$ 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