sed 使用 -i 标志就地修改

sed 使用 -i 标志就地修改

我是新手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

相关内容