2009-09-14 3 views
13

안녕하십니까, BSD sed에서 다음을 수행하려면 어떻게해야합니까?BSD sed에서 줄 바꾸기를 어떻게 사용합니까?

sed 's/ /\n/g' 

매뉴얼 페이지에서 \ n이 대체 문자열 내에서 문자 그대로 취급되므로이 동작을 어떻게 피할 수 있습니까? 대체품이 있습니까?

Mac OS Snow Leopard를 사용하고 있는데, fink를 설치하여 GNU sed를 얻을 수 있습니다.

쉘에서
+1

작은 수정 : '\ n'은 문자 그대로 취급되지 않으므로 리터럴 'n'으로 변환됩니다 (즉, '\'는 삭제되지만 분명히 여전히 원하는 결과는 아닙니다). – mklement0

답변

14

, 당신은 할 수 있습니다 :

sed 's/ /\ 
/g' 

이 (가) 줄 바꿈을 삽입하는 백 슬래시 후 키를 입력 타격.

+0

환상적입니다, 감사합니다 Wooble. BSD sed가 대체 문자열에서 \ n을 지원하지 않는 이유는 무엇입니까? 그냥 궁금해서. –

+0

확실치 않지만 대체 문자열에서 이스케이프를 전혀 지원하지 않기로 결정한 것으로 보입니다. sed 'y// \ n /'는 문자열 교체 만 수행하지만 작동하는 것처럼 보입니다. ''를 정규 표현으로 대체해야한다면 실패 할 것입니다. 또한, \ n 특별 한 케이스 것 같다; \ r와 함께 당신은 'r'을 얻을 수 있습니다. – geoffspear

6

또 다른 방법 :

sed -e 's/ /\'$'\n/g' 

here를 참조하십시오.

+2

+1하지만이 기능은 쉘 기능 [ANSI C quoting] (http://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting) ('$ '..)에 의존합니다. 일부 쉘은 그것을 지원하지 않습니다 (예 :'dash' - POSIX의 일부가 아닙니다). 또한 두 개의 작은 따옴표로 묶인 문자열 사이에'$ '\ n "을 쐐기로 붙이는''/'\ ''\ ''/ ''은 개념적으로 명확하고 강력합니다. 또는'$ 's// \\\ n/g'('\'를 이스케이프해야 함)를 사용하십시오. – mklement0

4

사용의 용이성을 위해, 나는 개인적으로 자주

cr="\n" 
# or (depending version and OS) 
cr=" 
" 

sed "s/ /\\${cr}/g" 

은 그래서 1 개 라인에 남아 사용합니다.

+1

흥미 롭; 'cr'보다는'nl' 변수를 호출 할 것을 제안 할 수 있습니까? [ANSI C quoting] (http://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting)을 지원하는 쉘을 사용한다고 가정합니다 (예를 들어,'bash','ksh','zsh '), 당신은'cr = $ '\ n "'에 대한 할당을 단순화 할 수 있습니다; 플랫폼 차이에 대해 걱정할 필요가 없습니다. – mklement0

+0

"유닉스"에서'$ '\ n''에 대한 멋진 조언을 구하십니까? 실제로 도움이 될 것입니다. (제 썬은'\ n '과 같은 할당/동작에 대해 약간의 문제를 제공합니다.) – NeronLeVelu

+1

'$'\ n "(ANSI-C 인용)은 올바른 _shell_ ('bash', 'ksh' 또는'zsh' -'dash'와 같은 POSIX- 기능 전용 쉘이 아니라) 플랫폼이 중요하지 않아야합니다. ('bash'는 버전 2.0에서 기능을 선보였습니다 (오래전에'ksh'와'zsh'에 대한 확신이 없었습니다. 그러나 현재 시스템에 최신 버전이있을 것으로 기대합니다). – mklement0

관련 문제