2012-01-08 31 views
1

OpenGL頭文件gl.h以及許多其他頭文件包含遍佈許多行的函數定義。這裏有一個例子:sed正則表達式,用於對齊跨多行編寫的函數原型

GLAPI void glCopyTexSubImage2D(GLenum target, GLint level, 
           GLint xoffset, GLint yoffset, 
           GLint x, GLint y, 
           GLsizei width, GLsizei height); 

我想拿出一個正則表達式,我可以用SED使用它們對齊。接着前面的例子將成爲:

GLAPI void glCopyTexSubImage2D(GLenum target, GLint level,GLint xoffset, GLint yoffset, GLint x, GLint y,GLsizei width, GLsizei height); 

GLAPI令牌是針對OpenGL的,所以我寧願忽視它,這樣的解決方案可以在更多的環境中使用。

+1

你最好用一個代碼重新格式化工具。 – fge 2012-01-08 12:23:03

+0

我剛看了一眼Astyle,但它不能那樣做 – qdii 2012-01-08 12:38:15

回答

2

一個簡單sed的單行會爲你工作 -

sed ':a;{N;s/\n */ /};ba' INPUT_FILE 

測試:

[jaypal:~/Temp] cat temp 
GLAPI void glCopyTexSubImage2D(GLenum target, GLint level, 
           GLint xoffset, GLint yoffset, 
           GLint x, GLint y, 
           GLsizei width, GLsizei height); 

[jaypal:~/Temp] sed ':a;{N;s/\n */ /};ba' temp 
GLAPI void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); 
2

您可以使用ex

$ echo -e 'g/([^;]*$/,/);$/j\n%p' | ex gl.h 
  • /([^;]*$/比賽開始
  • /);$/比賽結束

如果要編輯就地,改變%pw

1

這可能會爲你工作:

sed '/.*(.*/,/.*);$/{H;//{x;s/\n */ /gp};d}' file