sed
é um editor de fluxo, o que significa que lê texto, edita e produz o resultado. Não precisa necessariamente trabalhar em arquivos, apenas fluxos de texto. (No seu caso, o fluxo de texto vem de um arquivo, então não há diferença prática.)
Usando sed
, você tem algumas opções
- Exclua todas as linhas que não possuem exatamente três letras minúsculas consecutivas, deixando o restante a ser passado (e impresso).
- Imprima apenas linhas que contenham exatamente três letras minúsculas consecutivas.
Em ambos os casos, você precisará garantir que os três sejam precedidos por um espaço e não tenham nada depois deles.
Isso corresponderá palavras de quatro (ou mais) caracteres e excluirá a linha correspondente. Note que não ligamos as extremidades da sequência para que elas fiquem bem no meio de uma sequência mais longa
sed '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' animals
Isso funcionará no arquivo como determinado, mas não leva em consideração a possibilidade de haver animais de duas (ou mesmo apenas uma) letra. (Pense "boi", por exemplo). Então, precisamos derrubá-los. Neste ponto, precisamos informar sed
que há várias operações a serem aplicadas a cada linha, por sua vez. Também precisamos introduzir um novo caractere $
, que afirma que a expressão regular deve se ligar ao fim de linha:
- Se encontrarmos quatro caracteres em uma linha, exclua a linha
- Se encontrarmos um espaço, duas letras e, em seguida, fim de linha, exclua a linha
- Se encontrarmos um espaço, uma letra e, em seguida, fim de linha, exclua a linha
Isso pode ser escrito em formato longo como este:
sed -e '/[[:lower:]][[:lower:]][[:lower:]][[:lower:]]/d' -e '/ [[:lower:]][[:lower:]]$/d' -e '/ [[:lower:]]$/d' animals
Se você tiver uma versão adequada de sed
, poderá reduzir isso para um formato mais legível. (Procure a bandeira -r
.)