Простой способ объединить строки с пробелами на месте, используя ex
(также игнорируя пустые строки), используйте:
ex +%j -cwq foo.txt
Если вы хотите напечатать результаты в стандартный вывод, попробуйте:
ex +%j +%p -scq! foo.txt
Чтобы объединить строки без пробелов, используйте +%j!
вместо +%j
.
Чтобы использовать другой разделитель, это немного сложнее:
ex +"g/^$/d" +"%s/\n/_/e" +%p -scq! foo.txt
где g/^$/d
(или v/\S/d
) удаляет пустые строки, а s/\n/_/
- это подстановка, которая в основном работает так же, как при использовании sed
, но для всех строк (%
).Когда синтаксический анализ завершен, выведите буфер (%p
).И, наконец, -cq!
выполняет команду vi q!
, которая в основном завершается без сохранения (-s
означает отключение вывода).
Обратите внимание, что ex
эквивалентно vi -e
.
Этот метод довольно переносим, так как большинство Linux / Unix поставляются с ex
/ vi
по умолчанию.И это более совместимо, чем использование sed
, где параметр на месте (-i
) не является стандартным расширением, а утилита сама по себе более ориентирована на поток, поэтому она не так переносима.