2011-12-26 34 views
7

Tôi muốn xóa dòng mới \n chỉ từ cuối tệp trong unix
ví dụ:Xóa dòng mới khỏi cuối tệp

abc 
def 
ghi 
​ 

đầu ra nên

abc 
def 
ghi 

Trong phần cuối của tập tin đó không phải là một đơn \n

+0

awk '{if (NR == 1 && $ 0 ~ /> /) {in $ 0; next} nếu ($ 0 ~/^> /) {print "\ n" $ 0; tiếp theo} else {printf ("% s" , $ 0)}} 'tên tệp Tôi đã thử tập lệnh ở trên nhưng nó đang xóa tất cả \ n nhưng tôi muốn \ n tồn tại ở cuối tệp phải được xóa. – Jayashri

+0

Ngôn ngữ nào? Nền tảng gì? – Oded

+0

unix, Tôi đã thử với tập lệnh lệnh awk – Jayashri

Trả lời

4

Nói chung, các công cụ văn bản Unix là hạnh phúc hơn nếu bạn làm đã một dòng mới vào cuối dòng cuối cùng trong tệp. Tại sao bạn cần phải loại bỏ nó?

Bạn không thể làm điều này (như xa như tôi biết) với awk, nhưng thật dễ dàng với perl:

perl -e 'undef $/; $_ = <>; s/\R\z//; print' 

EDIT: Nhiều năm sau nó xảy ra với tôi rằng bạn có thể có nghĩa là "làm thế nào làm cách nào để xóa theo các dòng trống từ cuối tệp "; nói cách khác, bạn có thể muốn giảm hai hoặc nhiều hơn dòng mới liên tiếp thành một dòng mới, chỉ ở cuối tệp. Một lần nữa đó là dễ dàng nhất với perl:

perl -e 'undef $/; $_ = <>; s/\s+\z/\n/; print' 

(Điều này sẽ zorch tùy ý trailing khoảng trắng nhân vật, không chỉ dòng mới này là gần như chắc chắn những gì bạn muốn..)

11

Bạn có thể:

perl -pe 'chomp if eof' file1 > file2 

Ví dụ:

$ cat file1 
abc 
def 
ghi 
$ perl -pe 'chomp if eof' file1 > file2 
$ cat file2 
abc 
def 
ghi$ 
+0

Tôi không thể xóa \ n khỏi tập tin, từ tập lệnh trên – Jayashri

+4

Lưu ý, nếu 'file1' giống với' file2', nó có thể xóa tệp . Được cảnh báo. Xảy ra với tôi. May mắn là tôi biết nội dung. –

+0

Tôi hy vọng điều này sẽ không hoạt động, ít nhất là không đáng tin cậy, vì 'eof' chỉ trở thành sự thật khi bạn cố gắng đọc * qua cuối * của tệp, điều này không nhất thiết xảy ra ở chế độ' -pe' khi ' $ _' là dòng cuối cùng của tập tin. – zwol

Các vấn đề liên quan