linux 和 python sed 命令警告

linux 和 python sed 命令警告

当我sed在终端中运行命令时,它工作得很好;但是,当我在 python 上使用它时,会抛出错误。

sed命令:

sed ':a; $!N; /^>/!s/\n\([^>]\)/\1/; ta; P; D' test.fasta

SJL19094 
MQVHPTLVLNPKLTIFLSFDGALGGLYDFITPNASALWAPPLGSNRVMYLRSDLRYGDDDPLSWPQSYVPQYCHFPIIRSVLLNPSDSHPDARYTGFRAKLTSTKLILPANAGVQDSYSIISFAWFQKRVDKTVEHGKGTTFFEGAEDLKHSYTVLLHDLLERLQHLPMS
SJL19095 
MGIQAHLGHPQATGEPSGEVWGP
SJL19096 
MLPKEIDEFKNEIDSRGGYMYTLATSINDFTENTHETVCQFLKAAPLIPDLEYKFDPNKREDYPEKQWTSSGLVQDERLSHVRTWLRNVRYHPEGLNNKQYLTFKQYCRNFFLDKEG
SJL19097
MGNGIATSYFQELEMEAKLARRHYDKRERGMMMKAVQLGIPKSYSKFIAMMGFNMPHTYQEWKARVTATYEERQKKWVFDQTTSTPYDSCPLNKGHSNTALATKQMARPPMTAIYKTSNSVS

但是,在 python 中使用相同的代码会出现以下警告。

Python命令

import subprocess
command=(f"sed ':a; $!N; /^>/!s/\n\([^>]\)/\1/; ta; P; D' test.fasta")
subprocess.call(single_line,shell=True)
sed: -e expression #1, char 16: unterminated `s' command

任何有关相同的解释将不胜感激。提前致谢!

答案1

更改您的 f 字符串以也包括原始字符串,以便转义序列\n按字面意思理解而不是扩展,这就是 sed 吹毛求疵的情况。基本上 \n 被扩展,并且 sed 在 s/// 命令的 lhs 中看到一个死胡同。

我相信下面的内容应该能让你开始运行。

command=(fr"sed ':a; $!N; /^>/!s/\n\([^>]\)/\1/; ta; P; D' test.fasta")

PS 不确定 python 变量“single_line”是什么,但您需要变量“command”代替它。

相关内容