Как удалить пустые строки из файла

Входные данные

Создадим для примера файл input.txt с таким содержанием:
НАЧАЛО
this is line 1
this is line 2
some lines here


there are 2 blank lines above
this is last line


КОНЕЦ
Метки НАЧАЛО и КОНЕЦ не входят в содержание файла.

Решения на bash

Есть как минимум 6 вариантов решения этой задачи на bash.

$ grep -v '^$' input.txt

Опция -v является сокращенной версией опции --invert-match, которая означает выбор только тех строк, которые НЕ подходят под заданный паттерн.

$ grep '.' input.txt

В упрощенном виде вызов grep выглядит так:
grep куча_всяких_опций [pattern] [file ...]
В данном случае берется файл input.txt и из него извлекаются все строки соответствующие заданному паттерну.

$ sed '/^$/d' input.txt

Synopsis:
  • sed [-Ealn] command [file ...]
  • sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]

$ sed -n '/^$/!p' input.txt

По умолчанию каждая строка ввода после всех примененных к ней команд выводится в поток стандартного вывода. Опция -n подавляет такое поведение.

$ awk NF input.txt

awk - паттерно-ориентированный сканирующий и обрабатывающий язык.
Вызов у него такой: awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ...  ]
NF - специальная переменная, означает количество полей в текущей записи.

$ awk '/./' input.txt 

awk сканирует входной файл на строки которые соответствуют паттерну.