我想改变
>lcl|ORF183:9482:8118 unnamed protein product
成
>ORF183:9482-8118
在|
之后和'white space'之前保留所有内容,再加上第二个:
到-
到目前为止,我正在使用以下代码:
sed -e '/^>/s/ .*//' -e '/^>/s/|/ /' -e '/^>/s/lcl //' -e '/^>/s/\(.*\):/\1-/'
但希望用更简单的单行代码来完成。
这可能有效:
sed -e 's/\(^.*|\)\(.*\):\(.*\):\(.*\)[[:space:]]\(unnamed.*$\)/>\2:\3-\4/'
以下是基于您尝试过的代码的一些改进
$ sed -e '/^>/s/ .*//' -e '/^>/s/lcl|//' -e '/^>/s/:/-/2' ip.txt
>ORF183:9482-8118
-e '/^>/s/|/ /' -e '/^>/s/lcl //'
可以简化为-e '/^>/s/lcl|//'
如果你想匹配s/>[^|]*|/>/
和>
之间的任何文字,请使用|
sed
允许指定要替换的匹配项,s/:/-/2
表示将第二个:
替换为-
如果你的sed
实现允许分组,你可以将;
中的所有命令(由{}
分隔)分组为特定地址
$ sed '/^>/{s/ .*//; s/lcl|//; s/:/-/2}' ip.txt
>ORF183:9482-8118
请访问https://stackoverflow.com/tags/sed/info学习资源和其他好东西