지정된 문자가 처음 나타나기 전의 콘텐츠 삭제

지정된 문자가 처음 나타나기 전의 콘텐츠 삭제

매우 복잡한 상황이 발생했습니다. 정렬 후 다음과 같은 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) 귀하의 예에서 이를 유지하고 싶다는 것을 보여주었기 때문에 교체를 넣었습니다. (3) I 이 옵션은 제거되었습니다 스크립트가 요구 사항을 충족하는지 확인할 때까지 다시 추가하지 않는 것이 좋습니다..*gi|-i

관련 정보