Удаление прокомментированных строк в текстовом файле с помощью 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 
  • Удалить комментарии в файле C
  • поиск по шаблону и отображение последнего текущего шаблона?
  • Как получить строки, чей n-й столбец содержит m-й столбец
  • Сценарий, который выводит среднюю строку из нескольких групп, из файла
  • sed + удалить слово из определенной строки
  • Как распечатать строку, если эта строка или следующая строка не содержат определенную строку
  • Замените строки в файле на основе списка строк и списка соответствующих замещений
  • Как добавить текущую дату перед расширением файла для нескольких файлов в каталоге?
  • sed на cygwin может заменить только одного персонажа?
  • Как удалить строку, если разница между двумя столбцами меньше 2000
  • Как я могу использовать sed или ex для замены блока (многострочный код) новым блоком текста (кода)?
  • Interesting Posts

    Как установить определенные части libre-office на Arch Linux

    Разбор допустимого вывода в скрипте оболочки с помощью sed / grep

    Найти местоположение сценария с исходным кодом

    Означает ли это, что на машине установлен графический процессор?

    ', который qmake' возвращает значение, но 'sudo, который qmake' не делает

    Как изменить забытый пароль root?

    make install – как использовать wget, а не завивать

    Назначение статического IP-адреса с использованием nmcli

    Объединить столбцы в файле 1 с столбцами в файле 2 – должно быть простым – но что-то странное происходит

    Как я могу заставить Caja открыть каталог и выбрать файл?

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

    Сортировка установленных приложений по частоте использования?

    Как перейти с терминала Xterm на терминал по умолчанию в Ubuntu 16.04

    Настройка ключей SSH для производства и DR-сервера

    Есть ли способ разместить комментарий в файле, который vim будет обрабатывать, чтобы установить тип файла?

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