2013-08-21 3 views
2

I는 다음과 같이 포맷 된 파일이 있습니다OS X 터미널 : tr : 여러 캐리지 리턴을 추가하는 방법은 무엇입니까?

> ABC 
1 
2 
> DEF 
3 
4 

내가 각 > 4 캐리지 리턴을 대체 할 TR을 사용하고 싶습니다를, 그래서 것 같습니다 : I 시도

ABC 
1 
2 




DEF 
3 
4 

다음 터미널에서 :

ABC 
1 
2 

DEF 
3 
4 
: cat input | tr ">" "\n\n\n\n" > output 그러나 이것은 단지 이와 같은 데이터의 두 블록들 사이에 하나의 캐리지 리턴을 추가

어떻게 여러 캐리지 리턴을 인식 할 수 있습니까? 감사!

+0

은, 줄 바꿈은 줄 바꿈으로 표시됩니다 (일명 줄 바꿈 또는 '/ n' 또는'^ J'), 캐리지 리턴 ('\ r' 또는'^ M')이 아닙니다. –

답변

1

TL; DR

그럴 필요가 작업에 대한 잘못된 도구입니다; (SED 등) 뭔가 다른


TR (텍스트 교체를)하려고 만하지 1 : 1 교체 - 그래서 한 번에, 서로 한 문자를 대체합니다. 나는 현재 명령이/n/>>을/n/n으로, >>>를/n/n/n으로, >>>>를/n/n/n/n으로 대체한다고 생각합니다. (! 안된)

하는 대신에 나오지도이 같은 아마 뭔가를 사용해보십시오 :

cat input | sed $'s/>/\\\n\\\n\\\n\\\n/g' > output 
(당신이 다루는 것 같다) 유닉스 형식의 텍스트 파일에서
+1

OS X의'sed' 버전은'\ n'과 같은 이스케이프 시퀀스를 해석하지 않지만'$ '...''를 사용하여 쉘이'sed'에 넘겨주기 전에 해석 할 수 있습니다. 그리고'sed'를 행복하게 유지하기 위해 줄 바꿈을 빠져 나가야하고 쉘을 빠져 나오기 위해 이스케이프 처리를해야합니다. 그러면 다음과 같이 끝납니다 :'sed $ 's />/\\\ n \\\ n \\\ n \\\ n/g 'input> output' –

+1

yes 또는 awk에서'\ n' 문자를 이해하는 해당 문자를 사용하십시오. awk '{printf ("% s \ n \ n \ n \ n", $ 0)}''(테스트되지 않았지만 닫습니다. .... 모두에게 행운을 빕니다. – shellter

+0

@GordonDavisson 감사합니다! – blueberryfields