Разбор 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 
  • Сценарий оболочки, выполняемый в терминале, но не из файла сценария оболочки
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Различное поведение eval "command \" $ @ \ "", "$ @" и "$ (echo $ @)" при использовании в качестве аргументов
  • Использование kornshell или Perl для обхода разрешений, необходимых для root
  • Сообщение об ошибке сценария копирования CSV в bash
  • два файла .csv сравниваются с помощью awk
  • Невозможно запустить 'kill - - $$' в моем скрипте оболочки, когда я его использую
  • Оболочка: взаимный трубопровод STDIN / STDOUT двух команд
  • Bash: разбить список файлов на разные файлы?
  • Вставить в таблицу Oracle в цикле
  • Как изменить сортировку результата из grep -rc
  • Interesting Posts

    Как «расширить» переменную bash (включенный код работает для bash, но не zsh)

    SSH на удаленную машину с использованием другого локального идентификатора

    Установите ограничение размера для общего каталога SAMBA удаленно

    Использование TMUX при загрузке Linux CentOS

    Использовать HAProxy для туннелирования SSH через https

    grep с переменной в переменной

    Как я могу найти, какой пакет содержит отсутствующую страницу?

    используйте exec -a, чтобы назвать процесс, но запустите его в фоновом режиме, невосприимчив к CTRL-C

    Несколько шлюзов / серверов имен для физического и логического интерфейса (на одном физическом интерфейсе)?

    Как восстановить запрос Bash?

    Создание программного обеспечения для Linux, созданного с использованием многострочной

    Какой язык сценариев или платформа использовать для загрузки веб-страниц и взаимодействия с экраном?

    создать LVM VG для корня / dev / sda2

    Звук не работает в x, но в виртуальном терминале

    Планирование процесса и выделение ядра на больших процессорах .LITTLE

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