Удаляем комментарии и пустые строки из файла на Linux. При редактировании каких-либо конфигурационных файлов, в них присутствуют закомментированные и пустые строки — это не очень удобно (по крайней мере для чтения). Файлы можно отредактировать вручную, если в нем несколько закомментированных и пустых строк, но если файл имеет тысячи таких строк, это трудно сделать вручную. Сегодня в статье научимся избавляться от лишних пустых и закомментированных строк в файле.
Что такое комментарии в программировании?
Если вы загляните в исходный код или файл конфигурации, вы заметите, что многие строки начинаются со звездочки «*», косой черты «/», или хеша «#», или точки с запятой «;».
Эти строки известны как Комментарии.
В программировании комментарий — это удобочитаемое описание или аннотация, используемая для пояснения целей фрагментов кода.
Они помогают пользователям и другим программистам легко понять, что делает код.
Как правило, комментарии и пустые строки будут игнорироваться компиляторами и интерпретаторами. Они предназначены только для программистов.
Синтаксис комментариев варьируется в зависимости от языка программирования.
Теперь давайте посмотрим, как исключить или пропустить эти комментарии и пустые строки и отображать только те строки, которые не закомментированы.
Вывод содержимого файлов без комментариев и пустых строк на Linux
Позвольте мне показать вам содержимое файла sources.list в одной из моих систем Ubuntu:
cat /etc/apt/sources.list
Вывод:
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://archive.ubuntu.com/ubuntu focal multiverse
# deb-src http://archive.ubuntu.com/ubuntu focal multiverse
deb http://archive.ubuntu.com/ubuntu focal-updates multiverse
# deb-src http://archive.ubuntu.com/ubuntu focal-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse
# deb-src http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu focal partner
# deb-src http://archive.canonical.com/ubuntu focal partner
deb http://security.ubuntu.com/ubuntu focal-security main restricted
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted
deb http://security.ubuntu.com/ubuntu focal-security universe
# deb-src http://security.ubuntu.com/ubuntu focal-security universe
deb http://security.ubuntu.com/ubuntu focal-security multiverse
# deb-src http://security.ubuntu.com/ubuntu focal-security multiverse
Вы видите, что многие строки закомментированы символом «#». Это делает файл неудобным для чтения. Это небольшой файл, так что это не страшно.Но когда вы читаете очень длинные файлы конфигурации, например, «httpd.conf» или «php.ini», вам придется пройти через множество комментариев и пустых строк, и будет немного сложно найти, какие строки активны, а какие нет.Чтобы отфильтровать все комментарии и пустые строки от отображения в выводе файла, используйте команду grep, как показано ниже:
grep "^[^#*/;]" /etc/apt/sources.list
- первый символ ^ обозначает начало строки в данном файле, т.е. /etc/apt/sources.list.
- [^ # * /;] — все строки начинаются с любых символов, кроме этих четырех символов «#», «*», «/», «;». Другими словами, все строки, начинающиеся с символов «#», «*», «/», «;» будут исключены из вывода.
Пример вывода вышеуказанной команды:
deb http://archive.ubuntu.com/ubuntu focal main restricted deb http://archive.ubuntu.com/ubuntu focal-updates main restricted deb http://archive.ubuntu.com/ubuntu focal universe deb http://archive.ubuntu.com/ubuntu focal-updates universe deb http://archive.ubuntu.com/ubuntu focal multiverse deb http://archive.ubuntu.com/ubuntu focal-updates multiverse deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu focal-security main restricted deb http://security.ubuntu.com/ubuntu focal-security universe deb http://security.ubuntu.com/ubuntu focal-security multiverse
Все комментарии и пустые строки исчезли.
Теперь вывод вполне читабелен.Я предпочитаю способом через grep фильтровать ненужные строки, отображаемые в выводе. Вы также можете сделать это с помощью команд awk и sed.
awk '$1 ~ /^[^;#]/' /etc/apt/sources.list
и
sed -e '/^#/d' /etc/apt/sources.list
Удаление комментариев и пустых строк в файле на Linux
Давайте теперь отредактируем файл чтобы в нем не оставалось закомментированных строк.
cat /etc/apt/sources.list | grep "^[^#*/;]" > /etc/apt/sources.list.save
Можно и такой командой:
egrep -v '^#|^$' /etc/apt/sources.list > /etc/apt/sources.list.save
Как удалить комментарии из нескольких файлов
find -name ‘*.c’ | xargs sed -i ‘0,/^*\/$/d’