Как удалить остаток каждой строки после определенного шаблона в файле vcf?

Как удалить остаток каждой строки после определенного шаблона в файле vcf?

Как удалить цифры после :знака в каждой строке из файла 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в конце, но я уже упоминал об этом.

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