регулярное выражение sed для выравнивания прототипов функций, написанных на нескольких строках - PullRequest
1 голос
/ 08 января 2012

Заголовок OpenGL gl.h, как и многие другие заголовки, содержит определения функций, разбросанные по многим строкам. Вот пример:

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, поэтому я скорее проигнорирую его, чтобы решение могло использоваться в большем количестве контекстов.

Ответы [ 3 ]

2 голосов
/ 08 января 2012

Простой 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 голосов
/ 08 января 2012

Вы можете использовать ex:

$ echo -e 'g/([^;]*$/,/);$/j\n%p' | ex gl.h
  • /([^;]*$/ начало матча
  • /);$/ конец матча

Если вы хотите редактировать на месте, измените %p на w.

1 голос
/ 09 января 2012

Это может работать для вас:

 sed '/.*( .*/,/.* );$/{H;//{x;s/\n  */ /gp};d}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...