Grep: исключить строки

Дата: 27.09.2015Метки:

Часто внутри конфигурационных файлов я оставляю для себя небольшие заметки в виде комментариев. Это позволяет быстро вспомнить важные моменты и значительно помогает в процессе настройки. Со временем количество комментариев может настолько много, что они напротив затрудняют чтение файла. Кроме того, бывают ситуации когда необходимо исключить из файлов комментарии, которые не должны увидеть посторонние.

Чтобы избавить себя от рутины, я предпочитаю через команду grep исключить из файла сразу все имеющиеся в нем комментарии. Чтобы с помощью grep исключить только строки по заданному условию, необходимо выполнить команду с опцией -v в качестве параметра.

Команда ниже выведет на экран из содержимого файла example.conf только активные настройки, удалив при этом все имеющиеся в нем комментарии и пустые строки.

grep -v '^#|^$' example.conf

В результате выполнения команды, будут исключены строки начинающиеся с символа решетки ^#, а фильтр ^$ удалит из файла пустые строки.

Для удобства можно перенаправить вывод в текстовый файл:

grep -v '^#|^$' example.conf > new.conf

Чтобы с помощью grep исключить комментарии из множества файлов, можно воспользоваться скриптом ниже:

#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
  grep -v '^#|^$' $i > $i.out
  mv  $i.out $i
done