Убрать многострочный комментарий по уценке в bash - PullRequest
0 голосов
/ 29 апреля 2018

Как убрать многострочные комментарии уценки, например, приведенные ниже, в bash?

some text

<!-- QUESTION:
How do I remove everything
in-between these tags? 
 -->

some<!-- Including embedded single-line comments such as this --> text

Я пробовал sed -e 's/<!--((.*?)\n?)+-->//g' $1, который работает только с одной строкой, и cat $1 | tr '\n' '\r' | sed -e 's/<!--.*-->//g' | tr '\r' '\n', который удаляет все после первого многострочного комментария.

<!--((.*?)\n?)+--> захватывает необходимую область в моем текстовом редакторе, но sed -e 's/<!--((.*?)\n?)+-->//g' $1 не работает должным образом.

Другие примеры, которые я могу найти, работают с комментариями C ++ слишком сложно для декодирования.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете сделать это с помощью однострочного perl.

Переключатели Perl :

-0 sets the input record separator to the null character \0
-p prints the result of perl code
-e executes the following code

Внутри регулярного выражения :

g flag means global (perform the replacement as many times as possible)
s flag means treat the input as a multi-line string

Match the characters `<!--` followed by anything up to the characters `-->`
including anything after that till the newline.  Replace that with nothing. 

В действии :

perl -0pe 's|<!--.+?-->.*?\n||gs;' input

выход

some text


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