Porque o GNU find não suporta \n
como uma seqüência de escape. O regexp \n
corresponde ao caractere n
. O GNU encontra cópias da sintaxe tradicional do Emacs, que também não possui esse recurso.
Enquanto o GNU find suporta outras sintaxes de regex, nenhum suporta backslash-letter ou backslash-octal para indicar caracteres de controle. Você precisa incluir o caractere de controle literalmente no argumento.
Existem muitas sintaxes de regex diferentes. Nem POSIX expressões regulares básicas (BRE) nem expressões regulares expandidas (ERE) incluem escapes \n
ou backslash-octal. Ambas as definições deixam o significado de contrabarra quando não seguidas por um caractere especial indefinido. Os utilitários awk e sed ambos suportam \n
para significar uma nova linha; isso é específico para esses utilitários (e comuns, mas, como você vê, não são universais).
De um script de shell, você pode escrever
find . -regex $'./.\n.' # ksh/bash/zsh only
find . -regex './.
.'
find . -name '*
*'
¹ Logicamente: para uso interativo, você pode digitar qualquer caractere com C-q
; para uso de programação, \n
existe como parte da sintaxe literal da string.