我使用此sed命令将字符串"##INFO=<ID="
替换为"\t%"
:
bcftools view -h /data/ExAC.r1.sites.vep.vcf | grep "^##INFO=<ID=" | sed $'/^##INFO=<ID=/{ s//'\t%INFO' /; s/,.*//; p; }''
但我得到的正是我想要的输出,但它没有反斜杠,也没有打印任何东西。如果我在sed命令中删除\t%INFO
周围的单引号,它会自动标记输出,所以我也不想要它。
如何逃避反斜杠以便只打印反斜杠?
答案 0 :(得分:2)
sed $'/^##INFO=<ID=/{ s//'\t%INFO' /; s/,.*//; p; }''
1.)前面的美元符号似乎没有分数
sed '/^##INFO=<ID=/{ s//'\t%INFO' /; s/,.*//; p; }''
2.)你不能只嵌套单引号。我不知道这&#34;是如何起作用的#34;我不指望它。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
3.)这将使用制表符替换字符串,然后使用%INFO替换字符串。然后打印出来。逃避一次。
sed '/^##INFO=<ID=/{ s//\\t%INFO /; s/,.*//; p; }'
4。)这会用\ t%INFO替换stinge然后打印它,导致tab%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}'
答案 1 :(得分:1)
$&#39;串&#39;被称为ANSI C引用解释反斜杠序列,只是使用单引号来避免解释字符的缺点是它不能包含单引号,但可以连接不同的字符串qutoed。