Использование sed для удаления всех строк, содержащих специальные символы, цифры и пробелы

Использование sed для удаления всех строк, содержащих специальные символы, цифры и пробелы

Итак, я довольно новичок в использовании shell, в частности bash, и я в процессе написания скрипта, который будет переводить файлы, содержащие последовательности ДНК, в более удобный формат. К сожалению, многие из этих файлов будут содержать лишние строки, используемые для маркировки информации и т. д. Мне нужна команда sed, которая исключит эти строки, содержащие специальные символы, цифры или пробелы. Я обнаружил, что довольно просто удалить строки с пробелами, используя

sed '/ /d' infile

и я представляю, что удаление строк, содержащих числа, будет похожей стратегией с использованием regex. Я просто не нашел способа приблизиться к специальным символам в sed.

Спасибо

решение1

Чтобы удалить любую строку, которая не состоит исключительно из буквенных символов, вам нужно добавить начальный ( ^) и конечный ( $) якоря.

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

Вместо этого вы можете удалить любую строку, содержащую хотя бы один небуквенный символ.

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

Обратите внимание, что здесь курсор ^действует как оператор отрицания, а не как якорь, как в предыдущем выражении.


В качестве альтернативы можно использовать опцию grep whole-line ( -xили --line-regexp)

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

(эквивалент первого выражения sed) или с использованием обратного соответствия ( -v)

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

(эквивалент второго выражения sed).

решение2

Ответ взят из комментария OP

Думаю, я разобрался, я просто изменил свой код sedтак, чтобы он выглядел так, sed '/[[:alpha:]]//!d' infileчто — если следовать логике — должно исключать любую строку, содержащую что-либо, кроме[A-Za-z]

Связанный контент