sed는 대체되지 않습니다

sed는 대체되지 않습니다

그것을 얻고 싶지만 >chr05_pilon_pilon.12.1불행히도 다음 명령은 삭제되지 않습니다t

echo '>chr05_pilon_pilon.12.t1' | sed '/^\\>chr[0-9][0-9]_pilon_pilon/ s/\(.*\)t/\1/g'
>chr05_pilon_pilon.12.t1

내가 놓친 게 무엇입니까?

답변1

정규식을 사용할 때마다 "적을수록 좋다"는 점을 기억해야 합니다. 내 말은 항상 사용하려고 노력해야한다는 것입니다가장 단순한그리고가장 짧은데이터와 일치하는 패턴입니다. 모든 것을 맞추려고 하지 말고 꼭 필요한 부분만 선택하세요.

이 경우 마지막 항목 이후에 마지막 항목을 >chr05_pilon_pilon.12.t1삭제하기만 하면 됩니다 . 따라서 처음부터 일치시키려고 하지 마십시오. 그것에 대해 신경쓰지 마십시오. 그렇게 하면 정규 표현식이 더 복잡해지고 오류가 발생하기 쉬워질 뿐입니다. 실제 요구 사항에 따른 몇 가지 대안은 다음과 같습니다.t.

  1. .마지막 줄부터 시작하여 숫자가 아닌 문자를 모두 제거합니다 >.

     $ echo '>chr05_pilon_pilon.12.t1' | sed -E 's/^(>.*)\.[^0-9]*/\1./'
     >chr05_pilon_pilon.12.1
    
  2. t다음으로 시작하는 마지막 줄을 삭제합니다 >.

     $ echo '>chr05_pilon_pilon.12.t1' | sed -E 's/^(>.*)t/\1/'
     >chr05_pilon_pilon.12.1
    
  3. 위와 동일하지만 t바로 다음 경우에만 해당.

     $ echo '>chr05_pilon_pilon.12.t1' | sed -E 's/^(>.*\.)t/\1/'
     >chr05_pilon_pilon.12.1
    
  4. ta 뒤의 마지막 것을 제거하십시오 . 단 ., then으로 시작하고 그 뒤에 두 숫자의 합이 나오는 줄에서만 제거하십시오.>chrpilon_pilon

     $ echo '>chr05_pilon_pilon.12.t1' | sed -E 's/^(>chr[0-9][0-9]_pilon_pilon.*\.)t/\1/'
     >chr05_pilon_pilon.12.1
    
  5. X마지막으로, , YM또는 염색체 도 있다고 가정하면 MT위의 내용을 확장하여 해당 염색체와 일치시킬 수 있습니다.

     $ printf '>chrX_pilon_pilon.12.t1\n>chr05_pilon_pilon.12.t1\n>chrMT_pilon_pilon.12.t1\n' |
          sed -E 's/^(>chr([0-9XYM]{1,2}|MT)_pilon_pilon.*\.)t/\1/'
     >chrX_pilon_pilon.12.1
     >chr05_pilon_pilon.12.1
     >chrMT_pilon_pilon.12.1
    

답변2

\귀하의 패턴은 줄의 시작 부분에서 a 를 일치시키려고 시도 하지만 다음을 수행하지 않습니다.

$ echo '>chr05_pilon_pilon.12.t1' | sed '/^\\>chr[0-9][0-9]_pilon_pilon/ s/\(.*\)t/\1/'
>chr05_pilon_pilon.12.t1

\줄의 시작 부분을 일치시키려고 하지 마세요 :

$ echo '>chr05_pilon_pilon.12.t1' | sed '/^>chr[0-9][0-9]_pilon_pilon/ s/\(.*\)t/\1/'
>chr05_pilon_pilon.12.1

또한 X, Y 및 M 염색체를 허용할 수도 있습니다(게놈 어셈블리에 포함된 내용에 따라 다름).

echo '>chr05_pilon_pilon.12.t1' | sed -E '/^>chr([0-9][0-9]|[XYM])_pilon_pilon/ s/(.*)t/\1/'

또한 이는 /g필수 사항이 아닙니다.

답변3

다음 명령은 원하는 출력을 얻는 데 도움이 됩니다.

#!/bin/bash
echo '>chr05_pilon_pilon.12.t1' | sed 's/.t/./'

산출:

 >chr05_pilon_pilon.12.1

관련 정보