2016-08-18 102 views
1

我看到这个:How can I replace a newline (\n) using sed?,并想通过tr来代替换行符',如何用`tr`用逗号替换换行符?

文件看起来是这样的:

something 
newline 
newline again 

,我希望它看起来像这样:

something', 
newline', 
newline again', 

所以,我想这些:

tr "\n" "'," < myfileabove tr "\n" "\'," < myfileabove

他们都没有做我想要的... 。难道我做错了什么?

+1

你想要做哪些事:一)替换'”,'因为你的文字状态或b)添加新行' ','到你的例子显示的每一行的末尾? –

+0

我建议使用sed:'sed“s/$ /',/”文件' – Cyrus

回答

2

tr转换一个字符到另一个字符,它不映射到/从字符串,因此它不能映射换行符为一个字符串。试图使用sed来做到这一点,会让你感到无法理解和/或不可移动的混乱。只需使用awk

awk -v ORS="'," '1' file 

等一下 - 你贴例子没有告诉你替换为',换行具体做法是:

$ awk -v ORS="'," '1' file 
something',newline',newline again',$ 

这表明你在每一个是行的末尾附加',一个完全不同的东西。你仍然不能做到这一点与tr但你可以用sedawk做到这一点:

$ sed 's/$/'\'',/' file 
something', 
newline', 
newline again', 

$ awk -v ORS="',\n" '1' file 
something', 
newline', 
newline again', 
+0

'awk'没关系,但我更愿意坚持我认识的工具。有没有可能的方式使用'tr'来完成它? – Hunle

+0

不,'tr'用于将一个字符转换为另一个字符,但是您希望将一个字符转换为多字符字符串。如果你坚持使用你认识的工具,无论他们是否适合工作,而不是学习适合于每项工作的工具,那么编写软件将会非常困难。您要花费一个简短的学习曲线来终生耗时,低效,错误的编码。 –

+1

@Hunle这不会回答你的问题,并在过去一年+没有其他答案已发布,请参阅https://stackoverflow.com/help/someone-answers下一步做什么。 –