![각 앞으로 화살표(>) 앞에 새 줄(\n)을 추가합니다.](https://linux55.com/image/151520/%EA%B0%81%20%EC%95%9E%EC%9C%BC%EB%A1%9C%20%ED%99%94%EC%82%B4%ED%91%9C(%26gt%3B)%20%EC%95%9E%EC%97%90%20%EC%83%88%20%EC%A4%84(%5Cn)%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내 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