Usando sed para remover todas as linhas contendo caracteres especiais, números e espaços

Usando sed para remover todas as linhas contendo caracteres especiais, números e espaços

Portanto, sou bastante novo no uso do shell - bash especificamente - e estou escrevendo um script que traduzirá arquivos contendo sequências de DNA em um formato mais útil. Infelizmente, muitos desses arquivos conterão linhas estranhas usadas para rotular informações, etc. Preciso de um comando sed que exclua essas linhas contendo caracteres especiais, números ou espaços. Descobri que é bastante simples remover linhas com espaços usando

sed '/ /d' infile

e imagino que remover linhas contendo números será uma estratégia semelhante usando regex. Eu simplesmente não encontrei nenhuma maneira de abordar caracteres especiais no sed.

Obrigado

Responder1

Para excluir qualquer linha que não seja composta inteiramente de caracteres alfabéticos, você precisará adicionar âncoras de início ( ^) e fim ( )$

sed '/^[[:alpha:]]*$/!d' file

Em vez disso, você pode excluir qualquer linha que contenha pelo menos um caractere não alfabético

sed '/[^[:alpha:]]/d' file

Observe que o cursor ^atua como um operador de negação aqui, e não como uma âncora, como na expressão anterior.


Alternativamente, usando a opção de linha inteira ( -xou --line-regexp) do grep

grep -x '[[:alpha:]]*' file

(equivalente à primeira expressão sed) ou usando uma correspondência inversa ( -v)

grep -v '[^[:alpha:]]' file

(equivalente à segunda expressão sed).

Responder2

Resposta retirada do comentário dos OPs

Acho que descobri, simplesmente alterei meu sedpara ficar assim, sed '/[[:alpha:]]//!d' infileo que - se a lógica seguir - deve excluir qualquer linha contendo qualquer coisa, exceto[A-Za-z]

informação relacionada