Заменить все символы новой строки, кроме последнего

38

Как я могу заменить все символы новой строки пробелом, кроме последней строки? Я могу заменить все символы новой строки на пробел, trно как я могу сделать это с некоторыми исключениями?

Жиль "ТАК - прекрати быть злым"
источник

Ответы:

42

Вы можете использовать paste -s -d ' ' file.txt:

$ cat file.txt
one line
another line
third line
fourth line

$ paste -s -d ' ' file.txt 
one line another line third line fourth line
grebneke
источник
1
Круто! -sИ -dварианты , кажется , как для этого случая.
MKC
10

Вы можете использовать, trчтобы заменить все новые строки пробелом и передать вывод sedи заменить последний пробел обратно новой строкой:

tr '\n' ' ' < afile.txt | sed '$s/ $/\n/'
MKC
источник
5

Реализовать идею vonbrand в Perl, при условии, что файл достаточно мал:

perl -p00e 's/\n(?!\Z)/ /g' your_file
Джозеф Р.
источник
+1, потому что этот метод работает для замен многобайтовыми символами (в отличие от вставки GNU)
myrdd
-1

Нечто подобное sed -e 's;\n\(.\); \1;'должно делать ...

vonbrand
источник
-1

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

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
Abhijit
источник
Это также удалит последний перевод строки.
Тердон
Я так не думаю, все работает нормально. Вы действительно пробовали это ???
Абхиджит
Да, у меня есть. У тебя есть? Ваша trкоманда заменяет все символы новой строки пробелами, а ваша sedкоманда удаляет последний пробел. Это приводит к файлу без заключительного перевода строки, и поэтому это не то, о чем спрашивает вопрос. Кстати, нет смысла использовать int gв sedкоманде. Поскольку вы используете $, он может совпадать только в конце, gбессмысленно. Вам также не нужно выходить из пространства, `` тоже не имеет значения.
Terdon