[macos] MacOS에서 sed에서 쉼표를 줄 바꿈으로 바꾸시겠습니까?

쉼표로 구분 된 ID 파일이 있습니다. 쉼표를 새 줄로 바꾸려고합니다. 난 노력 했어:

sed 's/,/\n/g' file

그러나 작동하지 않습니다. 내가 무엇을 놓치고 있습니까?



답변

tr대신 사용하십시오 :

tr , '\n' < file


답변

사용 ANSI-C 인용 문자열을 $'string'

sed를 사용하려면 백 슬래시로 이스케이프 된 리터럴 줄 바꿈이 필요합니다. bash에서 $''문자열은 \n실제 줄 바꿈으로 바뀌지 만 sed가 줄 바꿈을 피하기 위해 볼 수있는 백 슬래시를 두 배로 늘려야합니다.

echo "a,b" | sed -e $'s/,/\\\n/g'

참고 이 모든 쉘에서 작동하지 않습니다 ,하지만 가장 일반적인에서 작동합니다.


답변

sed 's/,/\
/g'

Mac OS X에서 작동합니다.


답변

sed 사용법이 완전히 대체 표현 인 경우 (내 경향이 있음) perl -pe대신 사용할 수도 있습니다

$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz


답변

분명히 \r열쇠입니다!

$ sed 's/, /\r/g' file3.txt > file4.txt

이것을 변형 :

ABFS, AIRM, AMED, BOSC, CALI, ECPG, FRGI, GERN, GTIV, HSON, IQNT, JRCC, LTRE,
MACK, MIDD, NKTR, NPSP, PME, PTIX, REFR, RSOL, UBNT, UPI, YONG, ZEUS

이에:

ABFS
AIRM
AMED
BOSC
CALI
ECPG
FRGI
GERN
GTIV
HSON
IQNT
JRCC
LTRE
MACK
MIDD
NKTR
NPSP
PME
PTIX
REFR
RSOL
UBNT
UPI
YONG
ZEUS


답변

이것은 MacOS Mountain Lion (10.8), Solaris 10 (SunOS 5.10) 및 RHE Linux (Red Hat Enterprise Linux Server 릴리스 5.3, Tikanga)에서 작동합니다 …

$ sed 's/{pattern}/\^J/g' foo.txt > foo2.txt

… + +를 ^J수행하여 수행됩니다 . 신경 마십시오 전과 .ctrlvj\^J

추신 : RHEL의 sed는 GNU이고 MacOS sed는 FreeBSD 기반이며 Solaris sed에 대해 잘 모르겠지만 이것이 sed와 거의 작동한다고 생각합니다. YMMV 토 …


답변

MacOS는 다릅니다 .Mac에서 sed 로이 문제를 해결하는 두 가지 방법이 있습니다

  • 먼저 \'$'\n''바꾸기를 사용 \n하면 MacOS에서 작동 할 수 있습니다.

    sed 's/,/\'$'\n''/g' file
    
  • 두 번째는 빈 줄을 사용하십시오.

    sed 's/,/\
    /g' file
    
  • 추신. 범위를 구분하여주의하십시오 '

  • 셋째, gnu-sed를 사용하여 mac-sed를 교체하십시오.