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' 

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

  • Имеет ли tcsh эквивалент «$ {a: -b}» для назначения переменной по умолчанию, например Bash?
  • awk + паста для очистки PATH?
  • Понимание команды «grep» показывает разные результаты, чем ожидалось
  • Что особенного в printf над эхом
  • Как я могу сделать tcsh эхом время выполнения команды до ее выполнения?
  • Как выполнить команду на каждом входе, учитывая список входных данных
  • Как проверить, нет ли строки в tcsh
  • Могу ли я увидеть в истории вывод, из какой директории я действительно выдал команду?
  • Как указать аргументы для возврата всех файлов точек, но не. а также ..?
  • запуск рыбной раковины на новый терминал tcsh on centos
  • Выполнять вывод команды в tcsh
  • Linux и Unix - лучшая ОС в мире.