Zamień wszystkie znaki nowej linii na spację oprócz ostatniej


Odpowiedzi:


42

Możesz użyć 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
Fajne! -sI -dopcji wydaje się stworzony do tej sprawy.
mkc

10

Możesz użyć, traby zastąpić wszystkie znaki nowej linii spacją, przekazać dane wyjściowe sedi zamienić ostatnią spację z powrotem na nową linię:

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

5

Ponowne wdrożenie pomysłu vonbranda w Perlu, pod warunkiem, że plik jest wystarczająco mały:

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

+1, ponieważ ta metoda działa w przypadku zamiany znaków wielobajtowych (w przeciwieństwie do wklejania GNU)
myrdd


-1

To zadziałało dla mnie.

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

Spowoduje to również usunięcie ostatniej nowej linii.
terdon

Nie sądzę, działa dobrze. Naprawdę tego próbowałeś ???
Abhijit

Tak, mam. Czy ty? Twoje trpolecenie zastępuje wszystkie znaki nowej linii spacjami, a twoje sedpolecenie usuwa ostatnią spację. Powoduje to, że plik nie ma ostatniej nowej linii, więc nie jest to pytanie, o które pyta. Nawiasem mówiąc, nie ma sensu int używając gw sedpoleceniu. Ponieważ używasz $, może pasować tylko na końcu, nie gma sensu. Nie musisz też uciekać w przestrzeń, `` nie ma znaczenia.
terdon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.