Thay thế tất cả các dòng mới vào không gian ngoại trừ cuối cùng


38

Làm cách nào tôi có thể thay thế tất cả các dòng mới bằng không gian ngoại trừ dòng mới nhất. Tôi có thể thay thế tất cả dòng mới vào không gian bằng cách sử dụng trnhưng làm thế nào tôi có thể làm điều đó với một số ngoại lệ?

Câu trả lời:


42

Bạn có thể sử dụng 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
Mát mẻ! Các tùy chọn -s-dcó vẻ như được thực hiện cho trường hợp này.
mkc

10

Bạn có thể sử dụng trđể thay thế tất cả các dòng mới vào không gian và chuyển đầu ra sang sedvà thay thế không gian cuối cùng trở lại một dòng mới:

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


-1

Một cái gì đó như sed -e 's;\n\(.\); \1;'nên làm ...


-1

Điều này làm việc cho tôi.

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

Điều đó sẽ loại bỏ dòng mới cuối cùng là tốt.
terdon

Tôi không nghĩ vậy, nó hoạt động tốt. Bạn đã thực sự thử nó chưa ???
Abhijit

Vâng tôi có. Có bạn không trLệnh của bạn thay thế tất cả các dòng mới bằng dấu cách và sedlệnh của bạn sẽ xóa khoảng trắng cuối cùng. Điều này dẫn đến một tệp không có dòng mới cuối cùng và do đó không phải là câu hỏi đang yêu cầu. Nhân tiện, không có điểm int sử dụng gtrong sedlệnh. Vì bạn đang sử dụng $, nó chỉ có thể khớp ở cuối, điều gnày là vô nghĩa. Bạn cũng không cần phải thoát khỏi không gian, `` cũng không có gì khác biệt.
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.