在两个标记之间提取文本并替换字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在两个标记之间提取文本并替换字符相关的知识,希望对你有一定的参考价值。

我想改变

>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学习资源和其他好东西

以上是关于在两个标记之间提取文本并替换字符的主要内容,如果未能解决你的问题,请参考以下文章

在网页中的两个已知字符串之间提取文本并存储在变量中

如何使用正则表达式和 PHP 替换两个 HTML 标记之间的文本? [复制]

Python提取两个字符串之间的内容

正则表达式替换以删除 html 标记之间的空格

Python - 在其他两个特定字符之间的字符串中提取文本?

提取以相同的两个字符开头并以数字字符结尾的文本