Как удалить все комментарии из файла?

У меня есть файл с комментариями:

foo bar stuff #Do not show this... morestuff evenmorestuff#Or this 

Я просто хочу напечатать весь код без комментирования:

 foo bar stuff morestuff evenmorestuff 

Возможность снимать комментарии из файла настолько важна … Что это хороший способ сделать это?

8 Solutions collect form web for “Как удалить все комментарии из файла?”

Один из способов удалить все комментарии – использовать grep с опцией -o :

 grep -o '^[^#]*' file 

где

  • -o : печатает только согласованную часть строки
  • first ^ : начало строки
  • [^#]* : любой символ кроме # повторяется ноль или более раз

Обратите внимание, что пустые строки также будут удалены, но строки с пробелами останутся.

Я считаю, что sed может сделать гораздо лучше, чем grep . Что-то вроде этого:

 sed '/^[[:blank:]]*#/d;s/#.*//' your_file 

объяснение

  • sed по умолчанию будет искать ваш файл по строкам и печатать каждую строку после возможного применения преобразований в кавычках. ( sed '' your_file будет просто печатать все строки без изменений).
  • Здесь мы приводим команды sed для каждой строки (они разделены точкой с запятой).
  • Первая команда говорит: /^[[:blank:]]*#/d . На английском языке это означает, что если строка соответствует хешу в начале (которому предшествует любое количество ведущих пробелов), удалите эту строку (она не будет напечатана).
  • Вторая команда: s/#.*// . На английском языке, замените хэш-метку, за которой следует столько вещей, сколько вы можете найти (до конца строки, то есть) ни с чем (ничего не пустое пространство между последними двумя // ).
  • Таким образом, это будет проходить через ваш файл, удаляя строки, которые состоят полностью из комментариев, и любые строки, оставшиеся после этого, будут иметь комментарии, удаленные из них.

Вы можете использовать инверсное совпадение следующим образом:

  #grep -v "#" filename 

-v, -invert-match Инвертировать чувство соответствия, чтобы выбрать не соответствующие линии. (-v указан POSIX.)

Вы можете достичь требуемого результата с помощью команды sed. Команда ниже сделала трюк для меня.

 sed 's/#.*$//g' FileName 

где

  • #.*$ – Regexp будет фильтровать всю строку, начинающуюся с # до конца строки

Здесь нам нужно удалить эти строки, чтобы мы заменили на пустую, так что пропуская «замену».

  • g – упоминание повторного поиска шаблона до тех пор, пока не будет достигнут конец файла.

Общий синтаксис sed: s/regexp/replacement/flags FileName

 cat YOUR_FILE | cut -d'#' -f1 

Он использует # качестве разделителя столбцов и сохраняет только первый столбец (это все до # ).

Это сработало для меня

 sed -i.old -E "/^(#.*)$/d" file 

Мне нравится ответ на joseph, но он нужен, чтобы вырезать // комментарии, поэтому я немного изменил его и испытал на redhat

 # no comments alias alias nocom="sed -E '/^[[:blank:]]*(\/\/|#)/d;s/#.*//' | strings" # example cat SomeFile | nocom | less 

Бьюсь об заклад, есть лучший способ удалить пустые строки, чем использовать строки, но это было быстрое и грязное решение, которое я использовал.

-cheers

Используйте выражение типа

 egrep -v "#|$^" <file-name> 

: -v: будет инвертировать совпадение

: #: будет соответствовать всем строкам, начинающимся с #

: $ ^: будет соответствовать всем пустым строкам

  • Выходной сигнал в ловушке, вызвавший вызванную ловушку?
  • Динамическая переменная в скрипте KornShell
  • Параллельное выполнение сценария bash
  • Bash: как распечатать дополнительный столбец, соответствующий IP-адресу для имени
  • Сохранение подзаголовка в фоновом режиме
  • Запуск сценария bash с php от cron
  • Else not Executing
  • tar-каталоги, содержащие пробелы
  • Я хочу поймать STDERR и STDOUT сценария с фоновым запуском
  • Объединение двух переменных приводит их в действие в Windows
  • Сжатие нескольких файлов в разных папках без структуры папок
  • Interesting Posts

    Прокрутка по выделенному файлу в сценарии bash

    Пакет кросс-компиляции ARM не найден

    Немедленно введите последний каталог, который вы переименовали

    iscsi target к папке установленного парирования?

    Поиск размера сектора раздела

    Правильный способ перемещения каталога пользователя в новый домашний раздел

    Мониторинг использования диска в каталоге / файле

    Проблемы с обновлением BIOS через Ubuntu

    Добавление привязок клавиш для клавиши «Fn» + «Control» в openbox

    Как указать «действительный до» даты в OpenVpn для пользователя?

    Отключить прокрутку внутри терминала Xfce / Избегать прокрутки по истории команд

    Как перенести файл на основе выражения имени файла с помощью сценария оболочки?

    Grub rescue "не найден: 'grub_efi_secure_boot'", не может исправить ошибку «неизвестной файловой системы»

    Начальные вопросы относительно «<», «<<» и чтения файлов

    библиотека perl getopts.pl

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