SLES 12.3 и проблема с модулем oracleasm

Как упоминалось в комментариях выше, формат "комментариев" в вашем случае имеет значение. Тем не менее, для некоторых случаев этого может быть достаточно, без необходимости создавать скрипт.

Решение:

Читая вопрос, можно предположить, что вы уже используете grep для поиска файлов, так что передайте его через другой grep; примерно так:

grep your_pattern your_file | grep --perl-regexp --invert-match '(?:^;)|(?:^\s*/\*.*\*/)|(? :^\s*#|//|\*)'

Что не отлавливается:

Это все равно разрешит строки или строки, которые имеют символ "триггер" в другом месте строки, которые имеют комментарии в конце, как в echo "Hello World" # другой комментарий, или которые являются частью многострочного комментария (кроме случаев, отмеченных в объяснении ниже.

Если это используется в качестве пост-фильтра для grep, то эти ограничения должны быть незначительными, так как большинство комментариев будет отфильтровано, и вы больше не будете беспокоиться о том, "что ваши глаза остекленеют".

Объяснение:

Есть три шаблона, которые при необходимости можно модифицировать в соответствии с вашим случаем использования. Первый (?:^;) отлавливает строки, начинающиеся с символа ;. Должен быть первым, без пробелов. Второй отлавливает строки, начинающиеся с `/* ... */` в стиле комментария, с пробелами или без них. Третий отлавливает строки, начинающиеся с #, // или *, с пробелами или без них. * в последнем шаблоне помогает поймать строку внутри многострочного комментария в /* ... */, где обычно используется столбец * для соединения первой и последней строки вместе. Например:

/************
 *
 * This is my
 * multi-line
 * comment.
 *
 ************/

Обозначение (? ... ) вокруг каждого шаблона делает их "не захватывающими" шаблонами, в надежде увеличить скорость и уменьшить потребление ресурсов. Аргументы -Pv в grep указывают ему использовать правила регулярных выражений Perl --perl-regexp, что позволяет группировать не захватывающие шаблоны и позволяет работать оператору чередования |, ни один из которых не работает в CLI grep. На странице руководства grep есть предупреждение, что опция -P является экспериментальной, поэтому проверьте ее, прежде чем использовать в своей системе. Опция --invert-match указывает grep на обратное соответствие, возвращая строки, которые не соответствуют шаблону. Их можно объединить и сократить до -vP.

Причина использования этого фильтра в качестве постфильтра к обычному grep заключается в трех моментах. Во-первых, вы можете делать обычную выборку и добавлять дополнительную работу по использованию этого фильтра только тогда, когда вы столкнетесь с проблемой слишком большого количества комментариев в выводе. (Меньше ввода и меньше используемых ресурсов). Во-вторых, вы, вероятно, уже разработали шаблоны, которые часто используете, и привычки, которые с ними связаны, и добавление дополнительных сложностей может их нарушить. Добавление дополнительной работы по отладке паттернов, когда в этом нет необходимости, является напрасной работой. В-третьих, он не очень хорошо работает с многострочными комментариями, но если вы уже искали в файле то, что вам нужно, то он удалит большинство, если не все, комментарии из результатов и послужит вашей цели.

1
08.11.2017, 21:49
0 ответов

Теги

Похожие вопросы