LINUX.ORG.RU

sed + multiline


0

0

Здравствуйте. Есть файл, в нем есть описание структурки. Надо после этой структурки добавить кое-какие данные. Т.е.

Было:

struct M
{
    int x;
};

Стало:

struct M
{
    int x;
};

CHECKCLASS(M);
Как в sed работать с несколькими линиями сразу?

sed '/struct M/ {N;N;N;s/struct M\n{\n\ int x;\n\};\n/&\n\nCHECKCLASS(M);

Ну, вот как-то так… Написал, что первое в глову пришло. Запускать не пробовал, возможно ошибки.

anarquista ★★★★★
()
Ответ на: комментарий от facelift

Поэтому надо брать несколько строчек и заменять их ими же + CHECK()

facelift
() автор топика
Ответ на: комментарий от facelift

Тогда это слишком сложная для sed задача. Придётся правильно обрабатывать все { и }, чтоб правильно определить конец структуры. Вложенные {} и т.п.

Тут лучше использовать bison или что-то подобное.

Если же вложенные {} исключены, тогда не так всё сложно.

sed '/struct/ {:A;s/struct[^}]*};/&/;tB;N;bA;:B;s/struct \([^\n]*\)\n[^}]*};/&\n\nCHECKClASS(\1)/;}'

anarquista ★★★★★
()
Ответ на: комментарий от facelift

>Я просто шокирован - кроме s// я ничего про sed не знаю. Что можно почитать, чтобы быть в теме.

<p mode="srach">perldoc</p>

nnz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.