2013-01-16 73 views
0

我有一個包含以下字符串的示例文件。我需要通過刪除新行(\ n)將'if'和'endif'之間的所有字符串放在一行中(\ n) 示例如下所示。我需要使用sed或bash腳本的輸出。 任何人都可以幫助我嗎?Shell腳本模式識別

--sample字符串

if 
ABC 
BCD 
DEF 
endif 
if 
123 
456 
789 
endif 

--needed ouptput

ifABCBCDDEFendif 

if123456789endif 

回答

1

假設該文件包含只有 IF-ENDIF塊:

awk '{ printf("%s", $0) } /^endif$/ { printf("\n") }' 

中間間隔文本應保持不變,稍微更復雜的方法稱爲f或:

awk '/^if$/ { InIf = 1 } 
    /^endif$/ { InIf = 0 } 
       { printf("%s", $0) } 
    !InIf  { printf("\n") }' 
+0

你好邁克爾,這個b將所有if塊同時放入一行,但我需要單獨使用Ifendif塊,如上所示。 – HungryProgrammer

+0

@HungryProgrammer對不起,我不關注。 awk腳本將每個ifendif塊放在它自己的行上。 –

0

假設你有文件TT1其中包含上面的字符串,然後使用

cat tt1 | sed 's/\n//g' | sed 's/endif/endif\n/g' 
+0

這裏是輸出ifABCBCDDEFendif if123456789endif –

+0

你使用哪個版本的sed工作? –