在MacOS上用sed替换逗号换行?

Wil*_*ill 264 unix macos sed

我有一个以逗号分隔的id文件.我正在尝试用新行替换逗号.我试过了:

sed 's/,/\n/g' file
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我错过了什么?

Pri*_*ley 334

tr改为使用:

tr , '\n' < file
Run Code Online (Sandbox Code Playgroud)

  • 用分号替换逗号也有效:`tr','';' <input.csv> output.csv` (5认同)

Wal*_*ndt 293

使用 $'string'

你需要一个反斜杠转义的文字换行符来获取sed.至少在bash中,$''字符串将替换\n为真正的换行符,但是你必须加倍sed将看到的反斜杠以逃避换行符,例如

echo "a,b" | sed -e $'s/,/\\\n/g'
Run Code Online (Sandbox Code Playgroud)

  • 使用OSX 10.11:`sed -E $'s/<\\/br>/\\\n/g'file`,无需安装gnu-sed (7认同)
  • 奇怪的是,它也适用于一个反斜杠,即`echo"a,b"| sed -e $'s /,/ \\n/g`. (4认同)
  • Upvoted.有关更多信息,请参阅`man bash`的"QUOTING"部分. (2认同)
  • 通过给定的示例验证了在OS X 10.7上的工作能力。-e部分似乎没有必要。 (2认同)

Max*_*asy 118

sed 's/,/\
/g'
Run Code Online (Sandbox Code Playgroud)

适用于Mac OS X.

  • 嗯,这对我有用,而`\n`和`\\n`却没有. (9认同)
  • 请注意,反斜杠*转义*文字换行符(因此它不是命令终止符):它不是*行继续符(如bash等).要查看差异,请尝试编写上面的命令而不使用引号:反斜杠将被shell解释为行继续符,并且它将被丢弃.相反,将引用的表达式(不带引号)的内容包含在单独的逗号到换行文件中(这会消除shell语法),并且它可以正常工作! (6认同)
  • 这是唯一适用于sed脚本的解决方案. (4认同)
  • 谢谢你 - 想知道为什么我的旧linux技巧在OSX中不起作用.但这样做! (2认同)
  • 这很好,因为它可以替换任何东西,而不是字符。tr 似乎只适用于字符。如果将字符串作为第一个参数,它将替换所有出现的字符,而不是字符串。 (2认同)

nar*_*789 22

如果你的sed用法往往是完全替换表达式(就像我的那样),你也可以使用perl -pe

$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz
Run Code Online (Sandbox Code Playgroud)


小智 14

这适用于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
Run Code Online (Sandbox Code Playgroud)

...... ^J通过做ctrl+ v+ 来完成j.请记住\之前的^J.

PS,我知道RHEL中的sed是GNU,MacOS sed是基于FreeBSD的,虽然我不确定Solaris sed,但我相信这对任何sed都有用.YMMV tho'......


小智 13

显然\r是关键!

$ sed 's/, /\r/g' file3.txt > file4.txt
Run Code Online (Sandbox Code Playgroud)

转化为:

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
Run Code Online (Sandbox Code Playgroud)

对此:

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
Run Code Online (Sandbox Code Playgroud)

  • 请记住,`\ r`与`\n`不同,这可能会破坏进一步的数据操作和使用. (10认同)
  • 对不起,这对我不起作用.我刚刚得到一个'r'应该有换行符. (3认同)

Cne*_*ork 7

MacOS不同,有两种方法可以用mac中的sed来解决这个问题


rye*_*nus 6

为了完成它,这也有效:

echo "a,b" | sed "s/,/\\$(echo -e '\n\r')/"
Run Code Online (Sandbox Code Playgroud)