
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 ( -x
ou --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
sed
para ficar assim,sed '/[[:alpha:]]//!d' infile
o que - se a lógica seguir - deve excluir qualquer linha contendo qualquer coisa, exceto[A-Za-z]