Удаление прокомментированных строк в текстовом файле с помощью sed

Я sed . Я хотел бы использовать sed для удаления комментариев в текстовом файле.

В моей серии текстовых файлов прокомментированные строки начинаются с символа # или символа @ (т. xmgrace Это файлы, первоначально предназначенные для построения в xmgrace ). Предположим, у меня есть следующий образец файла (например sample.txt ):

 # Comment 1 # Another comment # Yet another comment @ More comments @ Still more comments data1 data2 data3 

Я хотел бы использовать sed для изменения sample.txt , чтобы получить следующее:

 data1 data2 data3 

где в обеих версиях sample.txt имеется пустая строка между « data2 » и « data3 ».

С вдохновением от этого вопроса переполнения стека я придумал эту серию (последовательных) команд:

 sed -i 's/#.*$//' sample.txt sed -i 's/@.*$//' sample.txt 

которые дают этот файл:

  <blank line> <blank line> <blank line> <blank line> <blank line> data1 data2 data3 

где <blank line> является пустой строкой. (Мне пришлось написать это так, чтобы Stack Exchange корректно форматировал вывод.)

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

Другая возможность (последовательных) команд:

 sed -i 's/#.*$//' sample.txt sed -i 's/@.*$//' sample.txt sed -i '/^$/d' sample.txt 

из которого я получаю следующий вывод:

 data1 data2 data3 

Вышеупомянутое, однако, также неверно, потому что пустая строка между « data2 » и « data3 » не была сохранена (я неправильно удаляю все пустые строки без разбора). Как просто удалить прокомментированные строки?

Я запускаю Ubuntu Linux. Спасибо за ваше время!

2 Solutions collect form web for “Удаление прокомментированных строк в текстовом файле с помощью sed”

Используйте команду sed delete (здесь предполагается, что GNU sed найден в Ubuntu и других системах GNU).

  sed -i '/^[@#]/ d' sample.txt 

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

 sed -i '/^\s*[@#]/ d' sample.txt 
 grep '^[^@#]' < file.in > file.out 

вы получите строки, начинающиеся с любого символа, но @ и # так эффективно удалите #foo , @foo а также пустые строки.

 grep -v '^[@#]' < file.in > file.out 

сохранит пустые строки. Если вы хотите рассмотреть строки, которые имеют пробелы перед символами @ , # :

 grep -v '^[[:blank:]]*[@#]' < file.in > file.out 

А также удалять пустые строки:

 grep '^[[:blank:]]*[^[:blank:]@#]' < file.in > file.out 
  • Фильтрация журнала на последней букве в строке
  • извлекать только подстроку после двойных кавычек - grep
  • Команда Awk / sed для вырезания нескольких разделителей
  • Утверждение awk sed if
  • любая команда, которая может форматировать html или xml из оболочки?
  • Источник «gsed: не может читать: нет такого файла или каталога»?
  • Использование sed для редактирования строк в файле с переменной
  • Sed: изменить каждое повторение не первого слова для каждого слова в тексте
  • Показывать только строки, которые находятся во всех текстовых файлах, по крайней мере, один раз
  • awk, вырезать символы из подстроки
  • Регулярное выражение с sed
  • Interesting Posts

    Fedora делает команду сломанной, несоответствие ядра

    Использование fasd для открытия файла или каталога в emacsclient

    Любая причина НЕ запускать Linux в виртуальной машине все время?

    Удалить повторяющиеся поля в данном столбце

    Есть ли файловая система, которая позволяет мне вставить некоторый блок в середине файла в O (1)?

    включить эхо-сервис и проблемы безопасности в Linux

    Использование встроенной команды «time» в bash вместо внешней команды

    Чтение списков пакетов … Ошибка!

    как настроить формат заголовка вкладок Terminator?

    Я не хочу использовать IEEE 802.11b (CCK)

    find и delete дает ложное состояние

    Почему устройство отображается как hidraw вместо hiddev?

    Запуск сценария Python Portio как обычного пользователя без доступа root

    Как загрузить все сообщения электронной почты с сервера POP3 в один текстовый файл с mailx?

    Как отредактировать только один столбец вывода из команды ls?

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