【发布时间】:2013-01-18 12:13:58
【问题描述】:
我有一个文件 file.txt 女巫有这些条目
纽约
洛杉矶
SF
我运行了命令 tr '\n' ','
我需要在同一个 file.txt 文件中的所有这些输出,所以我像这样重定向输出
tr '\n' ','
file.txt,
但它没有在 file.txt 中放入任何内容,结果文件为空,谁能向我解释为什么 tr 的输出由于重定向而丢失。
【问题讨论】:
我有一个文件 file.txt 女巫有这些条目
纽约
洛杉矶
SF
我运行了命令 tr '\n' ','
我需要在同一个 file.txt 文件中的所有这些输出,所以我像这样重定向输出
tr '\n' ','
file.txt,
但它没有在 file.txt 中放入任何内容,结果文件为空,谁能向我解释为什么 tr 的输出由于重定向而丢失。
【问题讨论】:
因为它首先打开输出文件,删除文件中的内容,然后对 tr 命令没有任何感觉并返回到空文件中
tr '\n' ',' < file.txt > file2.txt
会起作用
【讨论】:
由于您已使用 sed 标记您的问题,我建议使用 sed oneliner,sed 也可以使用选项“-i”“就地”更改您的文件
sed -i ':a $!N; s/\n/,/; ta' file
或使用 awk
awk '{x=x""sprintf($0",")}END{gsub(/,$/,"",x);print x}' file
不像 sed,awk 没有“就地”更改选项,你必须:
awk '...' file > /tmp/mytmp && mv /tmp/mytmp file
【讨论】:
如果您只想用, 替换换行符,您可以这样做
awk 'ORS=","' temp.txt > file.txt
【讨论】: