![在 MaxOSX 中使用 sed 时 \n 打印 n 而不是换行符](https://linux22.com/image/37801/%E5%9C%A8%20MaxOSX%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20sed%20%E6%97%B6%20%5Cn%20%E6%89%93%E5%8D%B0%20n%20%E8%80%8C%E4%B8%8D%E6%98%AF%E6%8D%A2%E8%A1%8C%E7%AC%A6.png)
当我使用时这是一个普遍问题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
解决方案可能还要快得多。