2012-09-07 50 views
0

我需要在shell中重新格式化一個文件,所以我只在某種模式之前留下'新行'。例:只在一個模式之前留下一個新行

輸入:

Europe First 
Asia Second 
Africa Third 
Australia Fourth 
Europe Sixth 
Australia Seventh 
Europe Eight 
America Last 

輸出:

Europe FirstAsia SecondAfrica ThirdAustralia Fourth 
Europe SixthAustralia Seventh 
Europe EightAmerica Last 

其中模式是 「歐洲」

+0

這是功課?如果是這樣,它應該被標記爲 – Borodin

+1

每行之間是否有空行?我認爲沒有。 – ikegami

回答

1
perl -i -0777pe's/\n(?!Europe|\z)/ /g' file 
+0

Thx。通過回覆的敏捷性,我明白這一定是非常簡單的事情。作爲Perl的新手,我想了解它是如何工作的。 –

+0

選項('-i','-0','-p'和'-e')記錄在[perlrun](http://perldoc.perl.org/perlrun.html)中。 – ikegami

+0

哎呀,我以爲我是想增加空格,但我誤讀了。如果不需要空格,請從替換表達式中刪除空格。 – ikegami

0

只需chomp每一行和print它,用它前面如果它以圖案開始,則增加換行符

perl -ne 'chomp; print "\n" if /^Europe/; print' myfile 
+1

我會用'perl -pe'chomp; s/^/\ n/if/Europe /&& $.-1; END {print「\ n」}「'爲了避免開始處出現空行並在結尾處遺失換行符。 – choroba

+0

也許吧。 ikegami選擇在連接線之間放置空格。但是這個要求非常簡單,我認爲任何闡述都可能是多餘的。 – Borodin

+0

爲什麼'$ .- 1'而不是'$。 > 1'? – Borodin

0

這可能爲你工作(GNU SED):

sed ':a;$!N;/\nEurope/!s/\n//;ta;P;D' file 
相關問題