当下一个字符为 "t" 时使用 sed 命令转义反斜杠
Escape backslash with sed command when the next character is "t"
我正在使用此 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.)你不能只嵌套单引号。我不知道这 "works" 我没想到会这样。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
3.) 这会将字符串替换为制表符,然后是 %INFO。然后打印出来。逃脱一次。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
4.) 这用 \t%INFO 替换了 stinge,然后打印它,导致选项卡 %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 /'
全部上线:
bcftools view -h /data/ExAC.r1.sites.vep.vcf \
| grep "^##INFO=<ID=" \
| sed -E 's/^##INFO=<ID=([^,]*),.*/\t%INFO /' \
| awk '{printf "%s ", [=16=]}'
$'string' 被称为ANSI C quoting interpreting backslash sequence,只是使用单引号来避免解释字符,缺点是不能包含单引号,但是可以连接不同的字符串qutoed。
我正在使用此 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.)你不能只嵌套单引号。我不知道这 "works" 我没想到会这样。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
3.) 这会将字符串替换为制表符,然后是 %INFO。然后打印出来。逃脱一次。
sed '/^##INFO=<ID=/{ s//\t%INFO /; s/,.*//; p; }'
4.) 这用 \t%INFO 替换了 stinge,然后打印它,导致选项卡 %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 /'
全部上线:
bcftools view -h /data/ExAC.r1.sites.vep.vcf \
| grep "^##INFO=<ID=" \
| sed -E 's/^##INFO=<ID=([^,]*),.*/\t%INFO /' \
| awk '{printf "%s ", [=16=]}'
$'string' 被称为ANSI C quoting interpreting backslash sequence,只是使用单引号来避免解释字符,缺点是不能包含单引号,但是可以连接不同的字符串qutoed。