Primeiro, vamos imprimir um:
$ printf %b '\u200b' | uniname
character byte UTF-32 encoded as glyph name
0 0 00200B E2 80 8B ZERO WIDTH SPACE
Agora, poderemos usar o mesmo formato para pesquisá-lo (usando o Bash):
$ printf %b '\u200b' | grep -q "$(printf %b '\u200b')"
$ echo $?
0
O truque aqui é que printf %b
trata os argumentos como caracteres codificados , assim, você pode usar \x
para imprimir caracteres de byte único e \u
* para imprimir caracteres de múltiplos bytes.
Para encontrá-lo em um arquivo, basta fazer isso:
grep "$(printf %b '\u200b')" filename
* A especificação POSIX não está clara sobre como %b
funciona. A página printf
diz "A especificação de conversão% b [...] foi incluída aqui como uma maneira portátil de processar as saídas expandidas em operandos de cadeia de caracteres [...] fornecidos pelo utilitário echo" e the echo
page mostra um único exemplo não documentado de seu uso.
Teste:
$ printf %b '\u200b' > test.txt
$ grep -q "$(printf %b '\u200b')" test.txt
$ echo $?
0