2010-07-17 52 views
2

我學習使用SED,並有一個假設條件:如何更換許多中間的空行,只有1空行各

bash$ cat states 
California 


Massachusetts 


Arizona 

Wisconsin 

我想輸出:(基本上,我想只有一個空行之間)

California 

Massachusetts 

Arizona 

Wisconsin 

請建議使用sed的方法。 它應該使用的多模式空間概念等

感謝,

Jagrati


在迴應一個評論,好吧,我進行了一些測試腳本,我是錯的hypoptics地址空間選擇標準只應用一次。它似乎一次又一次被激活。

bash$ cat file 
a 
b 
c 
a 
b 
c 

bash$ sed -e '/a/,/b/s/$/x/g' file 
ax 
bx 
c 
ax 
bx 
c 

我有印象,它會產生:

ax 
bx 
c 
a 
b 
c 

所以可能有人請解釋逗號的情況下,sed的收益如何分離的地址空間。

+0

桑達處理在一個循環中該文件。正則表達式地址不是文件中的絕對位置。評估每條線以查看它是否落在正則表達式地址範圍內。一旦達到範圍的結尾,則恢復正則表達式範圍開始的測試。 – 2010-07-17 10:29:06

回答

6

試試這個它會刪除所有連續的空行

cat states | sed '/./,/^$/!d' 

輸出:

California 

Massachusetts 

Arizona 

Wisconsin 
+1

沒用的貓用。 – ghostdog74 2010-07-17 08:38:18

+0

它的作品,但不能完全理解..這使用逗號分隔地址。第二個地址意味着空行。第一個地址表示任何單個字符。然後刪除不符合此條件的行。但是,不是僅應用一次地址空間選擇。那麼它是如何能夠擺脫馬薩諸塞州和亞利桑那州之間2個空行..你能解釋一下它是如何工作的.. – xyz 2010-07-17 09:13:15

+0

好吧,我進行了一些測試腳本,我是錯的hypopthesis針對空間的選擇標準僅適用一旦。它似乎一次又一次被激活。 bash的$貓文件 一個 b Ç 一個 b Ç 的bash $ SED -e '/ A /,/ B/S/$/X/G' 文件 斧 BX Ç 斧頭 BX ç 我有印象,它會產生: 斧頭 BX ç 一個 b ç – xyz 2010-07-17 09:22:20

1

您可以用awk以及

$ cat file 
California 


Massachusetts 


Arizona 

Wisconsin 

$ awk 'NF{print;print ""}' file 
California 

Massachusetts 

Arizona 

Wisconsin 
2

我知道OP明確要求瞭解決方案使用sed和/或awk,但問題也可以用cat解決:

cat -s file 

否則,這裏是另一種方式使用sed來解決問題:

sed '/./!d; G' file 

它利用克至追加一個空行,在文件中找到的所有非空行。

+0

只是一個小紙條,這個刀片最後一行之後的空白行,但當然可以照顧,通過 sed -e'/./!d'-e'$!s/$/\ > /'states 因此,您的基本基本上可以做到2次傳球的想法。 – xyz 2010-07-17 09:49:31

2

這可以在不sed來完成,也沒有滿足您的學習sed的要求:

cat -s states 

有趣的是要注意的是,三個例子做這info sed爲GNU sed給出的是每個要複雜得多比dalton'smarco's的答案。

這裏有凝結成單行那些版本:

sed ':x;/^\n*$/{N;bx};s/\n*/\n/' states 

sed '1,/^./{/./!d};:x;/./!{N;s/^\n$//;tx}' states 

sed -ne '/./!d;:x;p;n;/./bx;:z;n;/./!bz;i\ ' -e 'bx' states 
+0

只有這3個示例中的最後一個有效。第一個在第一行之前插入額外的空白行,第二個在加州和馬薩諸塞州之間沒有空行。 – xyz 2010-07-17 09:46:01

+0

+1了正確的答案只有* *是'使用cat' - 我不認爲我曾經看到過:) – 2010-07-17 09:46:08

+0

@learnerforever:我應該包括來自其中提到領導'info'文件中的信息並尾隨空行。缺少的空白行是他們腳本中的錯誤!將'1'改爲'0'(GNU'sed')似乎解決了這個問題。第一個似乎通過在's'之前加上'1!'來改進。 – 2010-07-17 10:14:21

0
grep . file > file_op 
+0

我不認爲它會用一個替換兩個空行。 – ppaulojr 2013-04-30 16:33:44