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

0

Então eu sou relativamente novo em usar o shell-bash especificamente - e estou no processo de escrever um script que irá 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 eu imagino que remover linhas contendo números será uma estratégia semelhante usando regex. Eu realmente não encontrei nenhuma maneira de abordar caracteres especiais em sed.

Obrigado

    
por hbeggs 30.06.2015 / 16:22

2 respostas

2

Para excluir qualquer linha que não seja composta inteiramente de caracteres alfabéticos, você precisará adicionar as iniciais ( ^ ) e final ( $ ) anchors

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 caret ^ está atuando como um operador de negação aqui, e não como uma âncora, como na expressão anterior.

Alternativamente, usando a opção 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 da segunda expressão sed).

    
por steeldriver 16.08.2015 / 15:39
0

Resposta retirada do comentário do OP

% bl0ck_qu0te%     
por A.B. 16.08.2015 / 15:19