Попытка удалить все закомментированные строки из кода с помощью sed:

1) /* ... */ и /* \n \n \n */

Пробовал использовать эту структуру, чтобы скрыть, показывая, что внутри

sed -n '/^\/\*/,/\*\//!p'

Но он, кажется, скрывает, что находится между разными строками, и пропускает строку /* .... */

Я имею в виду это работает здесь:

/******** 
This readme is intented ...
......
....
....
************/

Но он не работает встроенным здесь:

/* Just a small bug */

Он берет первый найденный /* и продолжает поиск */ в следующих строках:

/* Just a small bug */
code
code
code
/*****
To sum up this shows us...
...
...
...
...
******/

ТАК ВСЕ КОД ПОД "/* Просто маленькая ошибка */" скрывается :( и я очень скучаю по этому:

code
code
code

2) // inline: исключая http: // & https: // до и включая if after

Я пытаюсь удалить также строки и части строк, которые содержат // с:

sed 's/\/\/.*//'

который преуспевает только в этой реализации, когда // находится в начале строки:

sed 's/^\/\/.*//'

но в конце концов он удаляет встроенные ссылки, такие как http:// и https://

code
code https://www.sample.com/abc     // include this URL
code https://www.sample.com/abc     // exclude this URL but leave alow https://anothersample.com/xyz
code

Попытка поиска шаблонов sed, которые ищут http:// и https:// , игнорирует их, затем ищет в строке // и удаляет все после него (игнорируя http/https, если они расположены после //), но безуспешно:(

Может быть, у кого-нибудь есть хорошая идея, было бы здорово, в любом случае, спасибо!

1 ответ1

3

Я создал этот небольшой текстовый файл

/* one line comment */

some
multiple
code
here

/*****
multiple
line
comment
*****/

some code http://somelink
some code // some one line comment

Для этого небольшого тестового файла эта команда работает для удаления всех упомянутых вами комментариев.

cat comments.txt | sed -n '/^\/\*.*\*\//!p' | sed -n '/ \/\/.*/!p' | sed 's|/\*|\n&|g;s|*/|&\n|g' | sed '/\/\*/,/*\//d'

Эта команда делает это:

  1. sed -n '/^\/\*.*\*\//!p': удаляет все однострочные комментарии, такие как /* one line comment */ из тестового файла

  2. sed -n '/ \/\/.*/!p': удаляет все однострочные комментарии, такие как // some one line comment , но сохраняет ссылки http:// . Это можно сделать из-за пробелов в этой части / \/\/ . Я думаю, вы можете изменить это в /\s\/\/

  3. sed 's|/\*|\n&|g;s|*/|&\n|g' | sed '/\/\*/,/*\//d': удаляет все несколько строк комментариев, как в примере, но сохраняет код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .