Sed условное удаление EOL [дубликат]

0
02.08.2018, 13:28
1 ответ

Хм... эта замена 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)
2
28.01.2020, 02:31

Теги

Похожие вопросы