当下一个字符为“t”时,使用sed命令转义反斜杠

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当下一个字符为“t”时,使用sed命令转义反斜杠相关的知识,希望对你有一定的参考价值。

我正在使用此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周围的单引号,它会自动标记输出,所以我也不想要。

如何逃避反斜杠以便只打印反斜杠?

答案
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替换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}'
另一答案

参考Bash Quoting

$'string'被称为ANSI C引用解释反斜杠序列,只是使用单引号来避免解释字符的缺点是它不能包含单引号,但可以连接不同的字符串qutoed。

以上是关于当下一个字符为“t”时,使用sed命令转义反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

linux中sed命令如何运用‘\ ’ 反斜杠

Sed命令中含有转义字符的解决方法

Sed命令中含有转义字符的解决方法

将文字反斜杠后跟一个字符转换为相应的转义序列

java 字符串反斜杠怎么转义

字符串