
Я хочу удалить все пробелы из файла, за исключением каждой строки, начинающейся с одного и того же шаблона (шаблон — «ORGANISM»).
Вход:
Cat; Dog; Squirrel
ORGANISM Animalus terrus
Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
Выход:
Cat;Dog;Squirrel
ORGANISM Animalus terrus
Sequence:ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
Больше никаких пробелов ни в одной строке, кроме строки, начинающейся с символов «ОРГАНИЗМ».
решение1
sed '/^ORGANISM/!s/ //g' /path/to/input
Это удалит все пробелы во всех строках, которые ненетначните с ORGANISM
.
решение2
sed -e '/^ORGANISM/n' -e 's/ //g' < input > output
Первое выражение переходит на n
строку ext, если эта начинается с ORGANISM
, а если этого не произошло, s
заменяет все пробелы ничем ( g
глобально)
решение3
Вот версия Perl, использующая отрицательный просмотр вперед, (?!ORGANISM)
чтобы выяснить, нужно ли нам выполнять замену. -p
Флаги позволяют автоматически печатать
$ perl -pe 's/[[:blank:]]//g if /^(?!ORGANISM).*/' input.txt
Cat;Dog;Squirrel
ORGANISM Animalus terrus
Sequence:ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT