Удаление двух последовательных разрывов строк - PullRequest
0 голосов
/ 31 марта 2012

В моем файле много разрывов строк, например:

This is a line.

This is another line.

Я хотел бы удалить их, но только в тех случаях, когда первая строка заканчивается на }, например ::

\macro{This is a line.}

This is another line.

Это должно стать:

\macro{This is a line.}This is another line.

Как я могу удалить разрывы строк в этой ситуации?

Ответы [ 3 ]

3 голосов
/ 31 марта 2012

Это то, что я понял:

$ sed -n '/}$/{h;:a;n;/^$\|}$/{H;$!ba};H;g;s@}\n*@}@g};p' input.txt

Идея заключается в следующем:

  • Накопление всех непрерывных empty lines и lines endswith '}'
  • Заменить }\n* на }
  • Последняя строка требует специального рассмотрения.
1 голос
/ 31 марта 2012

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

sed '$!N;s/}\n$/}/;P;D' file

если есть пробел, попробуйте:

sed '$!N;s/}\s*\n\s*$/}/;P;D' file

или более формально:

sed '$!N;s/}[[:space:]]*\n[[:space:]]*$/}/;P;D' file
1 голос
/ 31 марта 2012

Вы можете просто использовать редактор, который поддерживает регулярные выражения и сделать замену в вашем файле. Заменить:

 }$\n\n

с

 }

Если вам нужно сделать это программно, применяется тот же принцип (т. Е. Использование регулярных выражений для замены строк), но фактический ответ, очевидно, будет зависеть от языка / среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...