
Итак, я довольно новичок в использовании 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]