单行将两个换行符转换为一个换行符?

时间:2009-09-24 00:04:38

标签: unix newline

我有一个文件,我想将“\ n”转换为“”并将“\ n \ n”转换为“\ n”。 例如:

I
had
a
toy
.

It
was
good
.

变为:

I had a toy .
It was good .

有没有人有这种操作的Unix单线程?

6 个答案:

答案 0 :(得分:3)

fmt | sed '/^$/d'

fmt命令会将行换行为75个字符,因此请使用fmt -w [WIDTH]设置更长的行。

答案 1 :(得分:3)

如果你有傻瓜

# awk 'BEGIN{RS=""}{$1=$1}1'  file
I had a toy .
It was good .

答案 2 :(得分:1)

又一个Awk解决方案:

$ cat data.txt 
I
had
a
toy
.

It
was
good
.

$ awk '{printf "%s ", $0} /^$/{print ""}' data.txt 
I had a toy .  
It was good . 

答案 3 :(得分:0)

如果你已经安装了Ruby,那么就可以实现这一功能了。

irb(main):014:0> puts f.gsub(/[a-zA-Z.](\n)/) {|s| s.chomp +" "}
I had a toy . 
It was good .

答案 4 :(得分:0)

我认为bmb对他/她自己的答案的评论暗示了如果你用Google搜索建议你可能遇到的困难。

Google'删除空白行'。

也许fmt不会自己做,但有很多方法。

我喜欢grep方法

grep -v "^$" filename > newfilename

虽然重命名文件有点麻烦。

编辑:'删除空白行Perl'找到的其中一个点击

perl -pi -e "s/^\n//" file.txt

答案 5 :(得分:0)

我能想到的第一件事是:

tr '\n' '#' | sed 's/##/\n/g' | sed 's/#//g'

其中#是文件中未使用的某个字符,这是它的缺点。你必须使用一些独特的角色;)