sed $'/^##INFO=<ID=/{ s//'\t%INFO' /; s/,.*//; p; }''
1.)前面的美元符号似乎没有意义
sed '/^##INFO=<ID=/{ s//'\t%INFO' /; s/,.*//; p; }''
2.) 你不能只嵌套单引号。我不知道这是如何“工作”的,我没想到会这样。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
3.) 这会将字符串替换为一个制表符,然后是一个 %INFO。然后打印它。逃脱一次。
sed '/^##INFO=<ID=/{ s//\\t%INFO /; s/,.*//; p; }'
4.) 这用 \t%INFO 替换刺痛然后打印它,产生选项卡 %INFO。再次逃脱。
sed '/^##INFO=<ID=/{ s//\\\\t%INFO /; s/,.*//; p; }'
5.)这应该有效。
但是使用捕获组有一个更简单的答案。看起来你正在寻找这个?
bcftools view -h /data/ExAC.r1.sites.vep.vcf \
| grep "^##INFO=<ID=" \
| sed -E 's/^##INFO=<ID=([^,]*),.*/\\t%INFO \1/'
全部上线:
bcftools view -h /data/ExAC.r1.sites.vep.vcf \
| grep "^##INFO=<ID=" \
| sed -E 's/^##INFO=<ID=([^,]*),.*/\\t%INFO \1/' \
| awk '{printf "%s ", $0}'