Почему sed не удаляет пустые строки?

Почему sed не удаляет пустые строки?

Почему эта команда sed не удаляет пустые строки?

sed -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" -e '/^$/d' <<< $myvar

Эта команда работает отлично, за исключением последней части -e '/^$/d' для удаления пустых строк, которая, похоже, вообще ничего не делает. Вот пример моего контента:

begin dump

Ctrl_ID:100

Это тот же контент, который просматривается с помощью cat -A

begin dump$
$
Ctrl_ID:100$

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

0A

В конце каждой строки находится абсолютно одинаковый код.

Я не понимаю, что здесь происходит.

^$должно совпадать, не так ли?

решение1

Попробуйте это (пустая строка теперь находится на первой позиции):

sed -e '/^$/d' -e 's/\r//g' -e '/^{$/d' -e '/^}$/d' -e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D' -e "s/'/''/g" <<< $myvar

Часть, которая отвечает за неработающий метод удаления пустой строки, это:

-e ':begin;$!N;/^state-text: {[[:space:]]\n/s/\n//;tbegin;P;D'

углубляясь...

D удаляет содержимое пространства шаблонов до первой новой строки (или до конца, если новой строки нет) и начинает новый цикл. Последнее означает, что любые команды, которые идут после D в программе sed, не будут выполнены, если выполняется сама D.

отздесь

Связанный контент