
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 ( -x
o --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
sed
para 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]