Хм... эта замена Vi не работает ни в одном редакторе Vi, в котором я пробовал. Вы, вероятно, имели в виду :%s/\\\n/ /g
, который будет работать в Vim, но не в Vi.
$ sed '/\\$/{N;s/\\\n/ /;}' file
line 1 line 2
line 3
line 4 line 5
Определяет, заканчивается ли текущая строка обратной косой чертой, и если да, то добавляет следующую строку.(sed
добавляет между ними символ новой строки ), заменяет обратную косую черту и новую строку символом пробела.
Это не удастся, если в конце двух последовательных строк есть обратная косая черта. Для этого используйте что-то вроде
sed ':top;/\\$/{N;s/\\\n/ /;btop;}' file
Здесь, если была обработана строка с обратной косой чертой, код возвращается к началу.
Аннотированная версия последнего sed
сценария:
:top; # define label "top"
/\\$/{ # the line ends with backslash
N; # append next line to pattern space with embedded newline
s/\\\n/ /; # substitute backslash and newline with space
btop; # branch to "top"
}
# (implicit print)