我是新手GNU sed
(在 macOS 上运行),希望缩短一些文件头(~50 K 头,78.3 Mb)。
我正在尝试通过指定带有标志的备份扩展名来修改 FASTA 文件-i
。
到目前为止我已经
sed -i.bak 's/^([^|]+).[^|]+(.*)/\1\2/' file.fas
这应该创建一个名为file.fas.bak
.
但是,我收到错误
sed: 1: "s/^([^|]+).[^|]+(.*)/\1\2/": \1 not defined in the RE
注释sed -re 's/^([^|]+).[^|]+(.*)/\1\2/' file.fas
正确打印到屏幕上。
关于在这种情况下如何打印到备份文件有什么想法吗?
答案1
您还必须指定该-r
选项,以便启用扩展正则表达式语法的解释(但请注意比和-E
更便携-r
很快就会取代它),所以你应该使用
sed -E -i.bak 's/^([^|]+).[^|]+(.*)/\1\2/' file.fas
或者,诉诸基本的正则表达式:
sed -i.bak 's/^\([^|]\{1,\}\).[^|]\{1,\}\(.*\)/\1\2/' file.fas
更新
在回复 @terdon 的问题时,您确认这些文件是 FASTA 文件。在这种情况下,您可以通过仅考虑标题行(以 开头的行>
)来提高效率,如 @terdon 所建议:
sed -E -i.bak 's/^(>[^|]+).[^|]+(.*)/\1\2/' file.fas