sed заменить на backspace

У меня есть trail.txt , который содержит список соединений spice . Теперь я хочу заменить все расширенные параметры на одну строку, т. Е. Удалить + и добавить эту строку в предыдущую строку.

trail.txt

 data + net06706 net06707 + net221 net222 net223 m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

(Желаемый) trail.txt

 data net06706 net06707 net221 net222 net223 m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

команда

 sed -e 's/^+/\b/g' trail.txt 

Я пытался перепрограммировать + с backspace, но не работал. Есть ли альтернативный способ работать над этим? Существуют ли другие альтернативы?

6 Solutions collect form web for “sed заменить на backspace”

Я не думаю, что вы можете использовать подход backspace – однако вы могли бы сделать что-то вроде

 sed -e :a -e '$!N;s/\n+/ /;ta' -e 'P;D' trail.txt 

См . Раздел «Объяснение известных однополых слонов» , часть I: Интервал между файлами, нумерация и преобразование текста и замена , 40. Добавьте строку к предыдущей, если она начинается с знака равенства «=» (с очевидной заменой + для = ).

FWIW, GNU awk

 awk -vRS='\\n\\+?' '{ORS=RT == "\n+"? "":RT; print}' trail.txt data net06706 net06707 net221 net222 net223 m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

Несколько идей, так как это будет немного сложно с sed:

 perl -00 -pe 's/\n\+\s*/ /g' file 
 awk ' { if (/^\+/) sub(/^\+[[:blank:]]*/, " ", $0) else if (NR > 1) print "" printf "%s", $0 } END {print ""} ' file 

Используйте Perl вместо sed:

 perl -ne 'chomp; print "\n" unless s/^\+// or 1 == $.; print }{ print "\n"' 

chomp удаляет новую строку. $. – номер строки ввода.

GNU sed позволяет не использовать perl для такой простой задачи:

 sed -z 's/\n+//g' trail.txt 
 sed 's/.$//' sed 's/.$//g' 

Это должно сработать. Работал для меня

  • scp не автозаполняется так же, как другие команды
  • Настроить cshrc для установки путей для определенных каналов
  • Использование базового имени текущего пути для определения нового файла
  • setenv не работает в tcsh
  • параметрические псевдонимы в csh для добавления команды экспорта
  • как перемещаться по слову в командной строке в tcsh?
  • Как проверить, нет ли строки в tcsh
  • С несколькими процессами может ли один процесс (p1) отправлять сигнал синхронизации SIGALRM, который принимается двумя или более процессами (p1, p2).?
  • tcsh: введите 2-значные часы в строке
  • добавить время для регистрации имен файлов
  • Почему tcsh последовательно имеет несколько fd, указывающих на / dev / tty
  • Interesting Posts

    Потеря данных при установке в петлю файла на съемном USB-накопителе

    Может sudo для пользователя, но «запустить команду как» отказано?

    Найти и заменить значения с помощью счетчиков

    Новая установка Ubuntu, теперь загрузочный экран перезагрузки показывает контроллер Ethernet в течение 1 минуты

    Есть ли какая-либо система Windows X, которая является HTML, CSS, Javascript? Например, веб-браузер?

    Выполнять команды bash над SSH во время пребывания в интерактивном режиме

    Как перенаправление в символах работает в последовательности?

    Предсказуемые имена сетевого интерфейса ломают vm-миграцию

    SELinux запрещает использовать ACPI / udev для использования sudo

    Как разрешен трафик устройства loopback?

    Возможная атака на VNC-сервер

    Сортировка в Linux для столбца, сохраняя другие значения неповрежденными

    Как узнать причину выполнения команды / кода в Linux?

    Символьные устройства для дисков в Linux

    Печать текста с терминала

    Linux и Unix - лучшая ОС в мире.