각 앞으로 화살표(>) 앞에 새 줄(\n)을 추가합니다.

각 앞으로 화살표(>) 앞에 새 줄(\n)을 추가합니다.

file1.fa형식은 다음과 같습니다.

>XXX[YY]
ZZZZZZ>XXX[YY]
ZZZZZZ>XXX[YY]
ZZZZZZ

sed 명령을 사용하여 앞으로 화살표 앞에 새 줄을 추가하려고 시도했지만 작동하지 않습니다.

sed 's/ \?\>/ \n\>/g' file1.fa > file2.fa

필수 파일 형식:

>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

다른 캐릭터로 시도해 봤는데 스크립트가 잘 작동합니다.

sed에서 앞으로 화살표를 처리할 때 포함해야 하는 제한 사항이 있는지 궁금합니다. 아니면 여기서 무슨 일이 일어나고 있는지 아는 사람이 있습니까?

답변1

당신은 탈출해서는 안됩니다 >( \>특수단어 경계무늬).

이것은 나에게 효과적입니다 ( GNU 사용 sed).

 sed -e 's/>/\n>/g' file1

귀하의 경우 내가 얻는 결과는 다음과 같습니다.


>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

답변2

이는 \>단어 문자와 단어가 아닌 문자 사이의 너비가 0인 공백과 일치하는 특수 패턴입니다. 는 어떤 의미에서도 특별하지 않으므로 >이스케이프할 필요가 없습니다.

>Standard 를 사용하여 첫 번째 줄을 제외한 모든 줄 앞에 개행 문자를 추가하려면 sed다음과 같이 하세요.

$ sed '2,${ y/>/\n/;s/\n/&>/g; }' file
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

표준은 sed삽입된 개행 문자에서는 작동하지 않으므로 s/>/\n>/g두 단계로 수행해야 합니다.

2,$초기 라인을 제외한 입력의 모든 라인을 처리합니다 . 여기에 포함된 명령은 { ... }이 줄에 적용됩니다.

이 명령은 y/>/\n/이 문자의 모든 인스턴스를 개행 문자로 바꿉니다. 명령>y할 수 있는표준에 개행 문자를 삽입합니다 sed.

생성된 각 개행 문자를 s/\n/&>/g일치하는 개행 문자로 바꾸고 그 뒤에 >. &명령의 바꾸기 부분에 있으면 일치 s하는 패턴을 삽입합니다.

답변3

나는 다음을 시도했고 훌륭하게 작동합니다

주문하다: sed "/^[^>]/s/>.*/\n&/g" filename

산출

sed "/^[^>]/s/>.*/\n&/g" filename
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

관련 정보