EDIT: Devido a um comentário Warren Young feito, me fez perceber que eu não estava claro em um ponto bastante relevante. Minha string de pesquisa já está na ordem UTF-16LE (não na ordem Unicode Codepoint, que é UTF-16BE), então talvez o problema Unicode seja um tanto irrelevante,
Talvez meu problema seja uma questão de como eu faço grep para bytes (não chars) em grupos de 2 bytes , isto é. para que UTF-16LE \x09\x0A não seja tratado como TAB, newline, mas apenas como 2 bytes que são UTF-16LE ऊ ? ... Nota: Eu não preciso me preocupar com pares substitutos UTF-16, então blocos de 2 bytes estão bem.
Aqui está um exemplo de amostra para esta string de 3 caracteres ऊपर :
(aqui é o post original)
Ao pesquisar um arquivo UTF-16LE com um padrão no formato \x00\x01\x...etc , encontrei problemas para alguns valores. Eu tenho usado sed (e experimentado com grep ), mas estando na localidade UTF-8 eles reconhecem alguns valores UTF-16LE como caracteres ASCII. Estou bloqueado para usar UTF-16, portanto, a recodificação para UTF-8 não é uma opção.
por exemplo. Neste texto ऊ (UNICODE 090A), embora seja um único caractere, ऊ é percebido como dois caracteres ASCII \x09 e \x0A .
grep tem uma opção -P (perl) que pode procurar por \x00\x... patterns, mas estou recebendo a mesma interpretação ASCII.
Existe alguma maneira de usar grep -P para pesquisar em um modo UTF-16, ou talvez melhor, como isso pode ser feito em perl ou algum outro script.
grep parece ser o mais atraente por causa de seu tamanho compacto, mas qualquer que seja o trabalho feito, isso irá ultrapassar essa preferência.
PS; Meu ऊ exemplo usa uma string literal, mas meu uso real precisa de uma pesquisa de estilo regex. Então este exemplo de perl não é bem o que eu estou procurando, embora ele processe o arquivo como UTF-16. .. Eu prefiro não ter que abrir e fechar o arquivo ... Eu acho que perl tem formas mais compactas para coisas básicas como uma pesquisa regex. Eu estou atrás de algo com esse tipo de sintaxe compacta.