我遇到了一个非常复杂的情况,排序后,我有一些像这样的txt文件:
<!DOCTYPE html>
<!-- saved from url=
(0084)https://www.ncbi.nlm.nih.gov/Structure/cdd/cddsrv>gi|148227144
------------maapaseescssklrsvsvdlnsdpalqidipdalserdkvkftvhtktklpnfknpefdvarfhedf
>gi|57525139
--------------------------------------------------------------------------------
---------------------------------mqklgegevsmtkeefakmkqeleaeylavfkktvssheiflqriss
>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">下载视频</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
选项并建议在验证脚本符合您的要求之前不要再次添加它。