Разбор C-стиля Многострочный комментарий

Я хочу отфильтровать некомментированный javascript с sed и вывести номер строки

Вот пример:

 /*! * jQuery UI 1.8.17 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI */(function(a,b){function d(b) {return!a(b).parents().andSelf().filter(f/*! * jQuery UI Widget 1.8.17 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Widget */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b/*! * jQuery UI Mouse 1.8.17 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Mouse * * Depends: * jquery.ui.widget.js */ 

Кто-то сказал мне использовать grep -n и sed regex следующим образом:

 grep -n "" test.js | sed ':a;$!N;$!ba;s/\/\*[^*]*\*\([^/*][^*]*\*\|\*\)*\///g' 

Это дает мне результат:

 1:(function(a,b){function d(b){return!a(b).parents().andSelf().filter(f(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b 

Но я хочу вывод:

 9: (function(a,b){function d(b){return!a(b).parents().andSelf().filter(f 17: (function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b 

Что-то не так с регулярным выражением?

2 Solutions collect form web for “Разбор C-стиля Многострочный комментарий”

Внутренние комментарии (/ *. *? * /) Удаляют все, кроме строк новой строки; grep непустые строки:

 perl -p0E 's!(/\*.*?\*/)!$1 =~ s/.//gr!egs;' test.js |grep -nP '\S' 

который выводит:

 9:(function(a,b){function d(b) {return!a(b).parents().andSelf().filter(f 17:(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b 

Использование Awk:

 awk '/^*\/\(/ {gsub(/\*\/|\/\*!/,""); print NR":",$0}' js 9: (function(a,b){function d(b) {return!a(b).parents().andSelf().filter(f 17: (function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b 
  • Как удалить цветовые коды из stdout и pipe в файл и stdout
  • Сканирование файла PDF
  • Несколько входов в одной команде
  • Как я могу проверить соответствие POSIX для сценариев оболочки?
  • Что такое sourcing мой сценарий оболочки?
  • Изменить файл в / etc с помощью сценариев оболочки?
  • Сценарий оболочки Crontabbed, не способный создавать / записывать в файл
  • Как использовать inotifywait для просмотра каталога для создания файлов определенного расширения
  • В сценарии оболочки bash пишется цикл for, который выполняет итерацию по строковым значениям
  • выход функции bash в трубу
  • Почему это назначение переменной не работает при использовании tee?
  • Interesting Posts

    Экспортировать командную строку без оценки вывода?

    Двойная загрузка с Windows 7 и Fedora 20

    Как удалить подкаталоги btrfs с помощью <FS_TREE> в их имени

    Невозможно установить шрифт urxvt в Fedora 24 с помощью xfce

    Печать на пользовательском размере бумаги / добавление формата бумаги в PPD

    Проблемы с получением помощи в vim

    Как подсчитать вхождения каждого слова, принадлежащего файлу, во все количество файлов `n`, переданных в качестве аргументов?

    CentOS: Как заставить pip установить Django с последним Python 3.5

    Хранение части аргументов командной строки в массиве пользователей

    Утилита для маркировки областей аудиофайлов

    Аутентификация пользователей через LDAP с использованием nginx

    Ошибка сочленения Heartbeat 3

    Последовательность Grep после / перед заменой -A / -B в AIX

    Невозможно сравнить результат lsb_release с строкой в ​​Bash

    Как установить корневую файловую систему Arch Linux на тонких LVS LVM на LUKS на разделенном на GUID устройстве?

    Linux и Unix - лучшая ОС в мире.