删除指定字符第一次出现之前的内容

删除指定字符第一次出现之前的内容

我遇到了一个非常复杂的情况,排序后,我有一些像这样的txt文件:

        <!DOCTYPE html>
        <!-- saved from url= 
     (0084)https://www.ncbi.nlm.nih.gov/Structure/cdd/cddsrv&gt;gi|148227144
         ------------maapaseescssklrsvsvdlnsdpalqidipdalserdkvkftvhtktklpnfknpefdvarfhedf  
         &gt;gi|57525139
         --------------------------------------------------------------------------------
         ---------------------------------mqklgegevsmtkeefakmkqeleaeylavfkktvssheiflqriss
         &gt;gi|49899170
         -------------mtsisedsdkekarsvsvdlnndasllidipdalcerdkvkftvhtkttlssfqkpdfsvprqhedf
   </pre><iframe id="canary-tool-tip" frameborder="0" class="fat-sapphire-swordtail- 
   U1xAEvvLch4FZ9B40MDPpa-tool-tip" src="./cd07663_files/mo0yqyx4jxm3k82fauc54s.html" sty>
      <div class="xl-chrome-ext-bar__logo"></div>

      <a id="xl_chrome_ext_download" href="javascript:;" class="xl-chrome-ext-bar__option">&#19979;&#36733;&#35270;&#39057;</a>
      <a id="xl_chrome_ext_close" href="javascript:;" class="xl-chrome-ext-bar__close"></a>
    </div></body></html>

其实我只是想得到这样的文件

      gi|148227144
      ------------maapaseescssklrsvsvdlnsdpalqidipdalserdkvkftvhtktklpnfknpefdvarfhedf  
      gi|57525139
      --------------------------------------------------------------------------------
      ---------------------------------mqklgegevsmtkeefakmkqeleaeylavfkktvssheiflqriss
      gi|49899170
      -------------mtsisedsdkekarsvsvdlnndasllidipdalcerdkvkftvhtkttlssfqkpdfsvprqhedf

所以我想我可以按照脚本进行操作sed -i 's/^.*gi//',但是我可以获得不完整的文件,你能给我一些建议吗?欣赏它

答案1

您的命令将删除一行中sed -i 's/^.*gi//'直到并包括最后一次出现的所有内容,因为尝试匹配尽可能多的字符。因此,如果随机字母字符串包含,它不会执行您期望的操作。gi.*gi

我建议将 添加|到您的模式中,因为这个随机字符串没有条形:

sed 's/.*gi|/gi|/'

注意:(1)我删除了^,因为它是多余的,因为.*从一开始就总是匹配,并且(2)我确实将 放入gi|替换中,因为你的示例显示你想保留它,(3)我删除了该-i选项并建议在验证脚本符合您的要求之前不要再次添加它。

相关内容