2009-09-24 227 views
1

我有一个文件,我想将“\ n”转换为“”和“\ n \ n”转换为“\ n”。 例如:单线程将两个换行符转换为一个?

I 
had 
a 
toy 
. 

It 
was 
good 
. 

变为:

I had a toy . 
It was good . 

有没有人有一个Unix的一行此操作?

+2

你举的例子并不能反映你的规则。如果“\ n”变成“”,那么AT ALL就没有换行符。 – gahooa 2009-09-24 00:07:35

+4

我认为他的例子清楚地表明了问题。 – acrosman 2009-09-24 00:15:36

回答

3
fmt | sed '/^$/d' 

的FMT命令将在75个字符换行,所以用FMT -w [宽度]设置更长的线。

+0

你甚至在这里需要sed命令吗?我认为他们会自己处理这个问题。 – acrosman 2009-09-24 00:18:34

+0

acrosman,我试着不用sed。我找不到可以删除空白行的选项。 – bmb 2009-09-24 00:19:59

0

如果你已经安装了Ruby,这是一个伎俩。

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

我觉得bmb“他/她自己的答案的评论暗示,如果你你可能有难度‘的建议,用Google搜索’。

谷歌'删除空行'。

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

我喜欢grep方法

grep -v "^$" filename > newfilename 

,虽然这是一个有点杂乱不得不重命名文件。

编辑:由“删除空行的Perl”发现命中的人给

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

grep不具备“修改”内容的能力。 – ghostdog74 2009-09-24 00:46:22

+0

但它不会修改内容 - 它只是过滤掉空白行并将它们发送到不同的文件。 – pavium 2009-09-24 00:49:26

+0

哎呀,我的意思是grep发送*一切,但空白行到不同的文件。 Grep是一个**过滤器**,并且非常有用。 – pavium 2009-09-24 00:50:53

0

我能想到的第一件事情是这样的:

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

#是不是使用的一些字符在文件中,这是它的缺点。你将不得不使用一些独特的性格;)

3

,如果你有呆子

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

+1不错!这没有我的答案所具有的线路长度限制。 – bmb 2009-09-24 03:34:43

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 .