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

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

28 голосов | спросил user59930 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 00:36:35 +0400000000amSun, 09 Feb 2014 00:36:35 +040014 2014, 00:36:35

5 ответов


30

Вы можете использовать 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 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 01:40:52 +0400000000amSun, 09 Feb 2014 01:40:52 +040014 2014, 01:40:52
7

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

tr '\n' ' ' < afile.txt | sed '$s/ $/\n/'
ответил Ketan 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 00:46:10 +0400000000amSun, 09 Feb 2014 00:46:10 +040014 2014, 00:46:10
4

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

perl -p00e 's/\n(?!\Z)/ /g' your_file
ответил Joseph R. 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 05:17:53 +0400000000amSun, 09 Feb 2014 05:17:53 +040014 2014, 05:17:53
-1

Что-то вроде sed -e 's;\n\(.\); \1;' должно делать ...

ответил vonbrand 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 00:50:43 +0400000000amSun, 09 Feb 2014 00:50:43 +040014 2014, 00:50:43
-1

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

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
ответил Abhijit 29 FebruaryEurope/MoscowbMon, 29 Feb 2016 11:01:46 +0300000000amMon, 29 Feb 2016 11:01:46 +030016 2016, 11:01:46

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132