在sed中用换行符replace逗号
我有一个逗号分隔的ID文件。 我试图用一个新的行代替逗号。 我试过了:
sed 's/,/\n/g' file
但它不工作。 我错过了什么?
用tr
代替:
tr , '\n' < file
使用$'string'
你需要一个反斜线转义的文字换行到达sed。 至less在bash中, $''
string会用真正的换行符replace\n
,但是必须加倍sed将会看到的反斜线,例如换行
echo "a,b" | sed -e $'s/,/\\\n/g'
sed 's/,/\ /g'
适用于Mac OS X.
如果你的sed用法往往是完全replaceexpression式(就像我的习惯一样),你也可以使用perl -pe
$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g' foo, bar, baz
这适用于MacOS Mountain Lion(10.8),Solaris 10(SunOS 5.10)和RHE Linux(红帽企业Linux服务器版本5.3,Tikanga)…
$ sed 's/{pattern}/\^J/g' foo.txt > foo2.txt
… ^J
是通过按ctrl + v + j完成的 。 请记住^J
之前。
PS,我知道RHEL中的sed是GNU,MacOS sed是基于FreeBSD的,虽然我不确定Solaris sed,但是我相信这对于任何sed都是非常有用的。 YMMV tho'…
显然\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
要做到这一点,这也是有效的:
echo "a,b" | sed "s/,/\\$(echo -e '\n\r')/"
虽然我迟到了这个职位,只是更新了我的发现。 这个答案只适用于Mac OS X.
$ sed 's/new/ > /g' m1.json > m2.json sed: 1: "s/new/ /g": unescaped newline inside substitute pattern
在上面的命令我试着用Shift + Enter添加新的行,这是行不通的。 所以这次我试着用错误告诉“转义的新行”。
$ sed 's/new/\ > /g' m1.json > m2.json
成功了! (在Mac OS X 10.9.3中)
只是为了澄清:OSX的man页(10.8;达尔文内核版本12.4.0)说:
[…]
Sed正则expression式
The regular expressions used in sed, by default, are basic regular expressions (BREs, see re_format(7) for more information), but extended (modern) regular expressions can be used instead if the -E flag is given. In addition, sed has the following two additions to regular expressions: 1. In a context address, any character other than a backslash (``\'') or newline character may be used to delimit the regular expression. Also, putting a backslash character before the delimiting character causes the character to be treated literally. For example, in the context address \xabc\xdefx, the RE delimiter is an ``x'' and the second ``x'' stands for itself, so that the regular expression is ``abcxdef''. 2. The escape sequence \n matches a newline character embedded in the pattern space. You cannot, however, use a literal newline charac- ter in an address or in the substitute command.
[…]
所以我想必须使用tr – 如上所述 – 或漂亮
sed "s/,/^M /g"
注意:你必须在vi编辑器中input< ctrl> -v,< return>来获得'^ M'
FWIW,下面一行在Windows中工作,并用换行符replacepathvariables中的分号。 我正在使用安装在我的git bin目录下的工具。
echo %path% | sed -e $'s/;/\\n/g' | less
我们也可以在sed中做到这一点。
你可以试试这个,
sed -i~bak 's/\,/\n/g' file
-i – 将改变文件中的修改。请小心使用此选项。
我希望这会帮助你。