
Как удалить цифры после :
знака в каждой строке из файла vcf. Пример:
0|0:0.81 0|1:0.81 0|0:0.76 0|0:0.83
0|1:0.99 0|0:0.03 0|0:0.83 0|0:0.2
Вывод должен быть таким:
0|0 0|1 0|0 0|0
0|1 0|0 0|0 0|0
Я попробовал следующее, но это удаляет все после первого:
sed 's/[:].*$//' file.vcf
решение1
Вы хотите удалить из :
, а затем как можно больше символов, являющихся цифрами или точками, которые находятся сразу после него:
$ sed 's/:[0-9.]*//g' file.vcf
0|0 0|1 0|0 0|0
0|1 0|0 0|0 0|0
Это также необходимо g
в конце, чтобы повторить замену для всех совпадающих подстрок в каждой строке.
Ваша команда,
sed 's/[:].*$//' file.vcf
будет соответствовать первому :
символу, а затемлюбое количество символов до конца строки. Вот почему вы в конечном итоге получаете
0|0
0|1
как выход.
Разница между этим и моим предложенным выражением в том, что .
(соответствует любому отдельному символу), который я изменил, чтобы [0-9.]
ограничить набор символов, которые мы действительно хотим удалить. Мы также не можем привязать шаблон к концу строки, $
поскольку нам нужно удалить и то, что находится в середине строки. И g
в конце, но я уже упоминал об этом.