当我使用时这是一个普遍问题sed
,但当\n
我在sed
.这是我得到的一个例子sed
。
我的文件myfile
包含以下内容:
1 2 3 4 5
当我使用这个时:
sed 's/ /\n/g' myfile
我明白了:
1n2n3n4n5
而不是得到这个:
1
2
3
4
5
有人知道问题出在哪里吗?
答案1
你正在使用OSX 10.8
,所以你的sed
工具是FreeBSD sed
,不是GNU sed
。所以FreeBSD sed
不解释\n
为换行符。
你可以试试:
$ sed 's/ /\'$'\n/g' myfile
$'\n/g'
导致将bash
字符串解释为标准转义扩展,因此在处理\n
之前转换为换行符。sed
或使用tr
代替sed
:
$ tr -s ' ' '\n' < myfile
答案2
Gnouc 很清楚原因,但\n
在语句右侧指定 a 的可移植方法s///
是:
s//\
/
但是您也可以从空白保留空间中将G
ewline\n
附加到模式空间的末尾,例如:
G
您也可以将y
翻译运算符与\n
右侧的 一起使用。所以你的...
sed 's/ /\n/g' myfile
...如果写成这样,就会达到您的预期...
sed 'y/ /\n/' myfile
...还有一个额外的优点,它可能也可以做到这一点微小的快一点。尽管 Gnouc 的tr
解决方案可能还要快得多。