Intereting Posts
Разрешение DNS через HTTP / HTTPS Почему мой супервизор не запускается при перезагрузке? python Vs bash string slicing Неправильное поведение VirtualBox, когда фокус мыши с iMac Maverick на vm работает с Debian wheezy Обрезать последние несколько видеокадров, используя только инструменты командной строки OpenSuse15 -> iptables -> geoip «Нет цепочки / цели / совпадения с этим именем». Как разрешить доступ без полномочий root к Nexus 7 2013 LTE (deb) через adb и fastboot? Как проверить прогресс cp, когда цель – целое устройство Заставлять весь сетевой трафик проходить через шлюз по умолчанию Как изменить оболочку cron (sh на bash)? Установить максимальное количество процессов, начатых incrond Причины установки X Windows на сервер Linux Могу ли я использовать один ключ как модификатор и отправить нормальное нажатие клавиши? bash: export: `PATH: home / pi / netkit / bin: / usr / local … invalid indentifier Время доступа не обновляется, когда я запускаю `ls a`, а затем` stat a`

Почему 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$ 

Рассмотрение пустой строки с помощью редактора Hex показывает, что все, что она содержит, – это один единственный символ с шестнадцатеричным значением

 0A 

Это точно такой же код в конце каждой строки.

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

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

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

 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.

отсюда