2009-09-24 30 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 . 
相關問題