2016-09-05 90 views
0

我陷入了下面的問題。我用while循環完成了這個工作,並且它工作正常,但無法省略每個循環中附加字符串的序列號。合併所有以IF開始並以分號結尾的行

我有一個文件內容

1 SELECT abc from a ; 

    2 .IF activi <> 1 
    3 THEN 
    4 QUIT; 
    5 .IF ERROR <> 0 THEN QUIT ERROR; 
    6 SELECT 
    7 a, 
    8 b, 
    9 c 
    10 FROM xyz; 
    11 .IF ERROR <> 0 
    12 THEN 
    13 QUIT ERROR; 

我想在同一個文件 編輯與下面的輸出

1 SELECT abc from a;  
    2 .IF activi <> 1 THEN QUIT ; 
    5 .IF ERROR <> 0 THEN QUIT ERROR; 
    6 SELECT 
    7 a, 
    8 b, 
    9 c 
    10 FROM xyz;  
    11 .IF ERROR <> 0 THEN QUIT ERROR; 

回答

1

隨着SED:

$ sed '/\.IF/{:a;/; *$/!{N;s/ *\n *[0-9]*//;ta}}' file 

輸出:

1 SELECT abc from a ; 

    2 .IF activi <> 1 THEN QUIT; 
    5 .IF ERROR <> 0 THEN QUIT ERROR; 
    6 SELECT 
    7 a, 
    8 b, 
    9 c 
    10 FROM xyz; 
    11 .IF ERROR <> 0 THEN QUIT ERROR; 

說明:

sed ' 
/\.IF/ {     # for lines containing ".IF" 
    :a;     # define a "a" label for upcoming loop 
    /; *$/! {    # if line does not contain ";" 
     N;     # add next line to pattern space 
     s/ *\n *[0-9]*//; # remove newline and leading digits 
     ta;    # loops to label "a" if ";" is not found 
    } 
}' file 
+0

謝謝你的回覆。如果可能的話,請你解釋一下。我理解它的工作原理會容易得多。 –

+0

我更新了我的答案。 – SLePort

+0

@Kenavoz謝謝你的解釋。它幫助我很多 –

相關問題