如何使用`tr`将换行符替换为逗号?

4
我看到了这个问题:如何使用sed替换换行符(\n)?,于是想尝试使用tr来用',替换换行符。

文件的内容如下:

something
newline
newline again

我希望它看起来像这样:

something',
newline',
newline again',

所以,我尝试了这些: tr "\n" "'," < myfileabove tr "\n" "\'," < myfileabove 但它们都没有做到我想要的...我做错了什么吗?

1
你想做什么:a)像你的文本所述,将换行符替换为“,”还是b)像你的示例所示,在每行末尾添加“,”? - Ed Morton
1
我建议使用sed命令:sed "s/$/',/" file - Cyrus
2个回答

6

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',

awk还可以,但我更喜欢使用我熟悉的工具。难道没有可能使用tr来完成吗? - makansij
不,tr是用于将一个字符转换为另一个字符,但您想要将一个字符转换为多个字符的字符串。如果您坚持使用您所知道的工具而不是学习适合每项工作的工具,无论它们是否适合该工作,您编写软件将会非常困难。您正在以短暂的学习曲线为代价,换取一生耗时、低效、有缺陷的编码。 - Ed Morton
'1' 的意思是什么? - Jas
这是一个恒为真的条件,因此会调用awk默认操作来打印当前记录。这是一个非常常见的awk习语。 - Ed Morton

0
为什么不使用这个呢?
cat file ¦ while read line
do
    echo $line"',"
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接