【问题标题】:Using SED to replace capture group with regex pattern使用 SED 将捕获组替换为正则表达式模式
【发布时间】:2018-12-18 14:43:43
【问题描述】:

我需要一些关于 sed 命令的帮助,我认为这有助于解决我遇到的问题。我基本上有长文本文件,看起来像这样:

>TRINITY_DN112253_co_g1_i2 Len=3873 path=[38000:0-183]
ACTCACGCCCACATAAT

ACT 文本块继续,然后有更多的文本块遵循相同的模式,除了 > 之后的文本在数字上略有不同。我只想将这个标题部分(后面跟着 > 的部分)替换为所有内容,直到最后一个“_”我认为合乎逻辑的 sed 命令如下:

sed -i ‘s/>.*/TRINITY.*_/‘

但是,sed 确实将每个标头更改为 TRINITY.*_ 而不是捕获我认为会的块。任何帮助表示赞赏!

(另外.. 只是为了说明清楚,我认为我的 sed 命令会将顶部标题块转换为:

>TRINITY_DN112253_co_g1_
ACTCACGCCCACATAAT

【问题讨论】:

    标签: linux unix sed


    【解决方案1】:

    这可能会有所帮助:

    sed '/^>/s/[^_]*$//' file
    

    输出:

    >TRINITY_DN112253_co_g1_ ACTCACGCCCACATAAT

    见:The Stack Overflow Regular Expressions FAQ

    【讨论】:

    • 欣赏这一点。尽管它确实编辑了标题,但它似乎完全删除了标题后面的任何文本:(我的输出文件现在看起来像这样:
    • 好收获。我已经更新了我的答案。 s/// 命令现在仅适用于以 > 开头的行。
    • sed '/^>/s/_[^_]*$//' 去掉尾随的'_' 怎么样? (不清楚描述想要什么)
    猜你喜欢
    • 2020-09-14
    • 2015-08-06
    • 2019-10-16
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2014-06-19
    • 2010-11-19
    • 2012-01-26
    相关资源
    最近更新 更多