Next: flow control branch
Up: 再進一步
Previous: 再進一步
  Contents
在原本的h, H, g, G, x裡面都只有對單一行處理,如果pattern match要跨行
時,就捉襟見肘。下面的命令用來處理兩行以上的pattern match及pattern
space, hold space的處理
- n 把pattern space東西送出,讀入下一行,所以下一行變成pattern
space中的東西。
- N 讀入下一行跟目前pattern space的
東西連起來變一行,但是裡面有個embedded換行符號。可以用
\n
來表示,記住,只有這時才可以用\n
來表示。
- D 幹掉到第一embedded newline部份,與N合用喔。
如果D在最底下被執行了,則pattern space東西保留下來,
迴圈到script頂端再來一次。
- P print到有embedded newline的一行,保留所有pattern space東西,
如果P在最底下被執行了,則pattern space東西保留下來,
,迴圈到script頂端再來一次。
Join兩行,
/join/ {
N
s/\n/ /g
}
把多行空白行幹掉成一行空白,
/^$/ {
N
/^\n$/D
}
請看,找到空白行後,把下一行加進來,如果只有一行空白,空白行與
下一行併成一行保留在pattern space,不過這時下個命令
/^\n$/D
沒作用,pattern space全部送出,
如果有兩行空白,所以Delete掉第一行空白,剩下一行空白,保留下來,
這時因為D命另有作用了,所以並不送出pattern space的東西,
繼續/^$/
,一直會有一行空白行留下來。這邊D與P都有迴圈的作用
,可以拿來作重複的處理。
Cyril Huang
2002-06-14