Usando sed para eliminar todas las líneas que contienen caracteres especiales, números y espacios

Usando sed para eliminar todas las líneas que contienen caracteres especiales, números y espacios

Así que soy bastante nuevo en el uso de shell, específicamente bash, y estoy en el proceso de escribir un script que traducirá archivos que contienen secuencias de ADN a un formato más útil. Desafortunadamente, muchos de estos archivos contendrán líneas superfluas utilizadas para etiquetar información, etc. Necesito un comando sed que excluya estas líneas que contienen caracteres especiales, números o espacios. Descubrí que es bastante sencillo eliminar líneas con espacios usando

sed '/ /d' infile

e imagino que eliminar líneas que contengan números será una estrategia similar usando expresiones regulares. Realmente no he encontrado ninguna forma de abordar los caracteres especiales en sed.

Gracias

Respuesta1

Para eliminar cualquier línea que no esté compuesta enteramente de caracteres alfabéticos, necesitará agregar anclajes de inicio ( ^) y fin ( ).$

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

En su lugar, puedes eliminar cualquier línea que contenga al menos un carácter no alfabético.

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

Tenga en cuenta que el signo de intercalación ^actúa aquí como un operador de negación en lugar de como un ancla como en la expresión anterior.


Alternativamente, usando la opción de línea completa ( -xo --line-regexp) de grep

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

(equivalente a la primera expresión sed) o usando una coincidencia inversa ( -v)

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

(equivalente a la segunda expresión sed).

Respuesta2

Respuesta tomada del comentario de OP

Creo que lo he resuelto, simplemente modifiqué mi sedpara que se vea así sed '/[[:alpha:]]//!d' infile, lo cual, si sigue la lógica, debería excluir cualquier línea que contenga cualquier cosa excepto[A-Za-z]

información relacionada