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


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

1
Круто! -sИ -dварианты , кажется , как для этого случая.
MKC

10

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

tr '\n' ' ' < afile.txt | sed '$s/ $/\n/'

5

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

perl -p00e 's/\n(?!\Z)/ /g' your_file

+1, потому что этот метод работает для замен многобайтовыми символами (в отличие от вставки GNU)
myrdd


-1

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

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space

Это также удалит последний перевод строки.
Тердон

Я так не думаю, все работает нормально. Вы действительно пробовали это ???
Абхиджит

Да, у меня есть. У тебя есть? Ваша trкоманда заменяет все символы новой строки пробелами, а ваша sedкоманда удаляет последний пробел. Это приводит к файлу без заключительного перевода строки, и поэтому это не то, о чем спрашивает вопрос. Кстати, нет смысла использовать int gв sedкоманде. Поскольку вы используете $, он может совпадать только в конце, gбессмысленно. Вам также не нужно выходить из пространства, `` тоже не имеет значения.
Terdon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.