2011-08-08 35 views
5

Tôi đang sử dụng sed trên cửa sổ để xóa một số dòng thừa trong định dạng kiểu unix (\ n dòng kết thúc). Thật không may, sed thay thế các kết thúc dòng ngay cả trong dòng nó không thay đổi thành \ r \ n. Làm thế nào tôi có thể ngăn chặn sed làm điều đó?Dừng sed trên cửa sổ để thay đổi r thành r n

My sed là một đơn giản sed-cho-windows-độc-exe:

C:\dev>sed --version 
super-sed version 3.59 
based on GNU sed version 3.02.80 

Trả lời

3

Tôi không biết làm thế nào bạn có thể làm điều đó với sed trên Windows nhưng bạn đã thử:

unix2dos you_file 
sed ... 
dos2unix you_file 
+0

Tôi biết unix2dos ... Tôi chỉ không muốn xử lý tệp của mình bằng sed trước và sau đó phân tích cú pháp bằng cách sử dụng unix2dos. Tôi muốn nói cho sed sử dụng \ n làm dấu phân cách dòng mới chứ không phải \ r \ n, mặc dù tôi đang làm việc trên máy tính Windows. – mort

2

Xin lỗi, nhưng sed dường như không hoạt động như bạn muốn, ví dụ, sed! = Awk (có thể cấu hình được).

Tôi đã tải xuống số ssed executable và đầu ra trợ giúp không đề cập đến bất kỳ tùy chọn nào cho điều này, vì tôi chắc chắn bạn biết.

Bạn có thể thử sửa đổi source code hoặc liên hệ với tác giả.

Đọc qua các tập tin NEWS trong mã nguồn, tôi thấy

* The s/// command now understands the following escape (in both halves): 
\a an "alert" (BEL) 
\f a form-feed 
\n a newline 
\r a carriage-return 
\t a horizontal tab 
\v a vertical tab 
\oNNN a character with the octal value NNN 
\dNNN a character with the decimal value NNN 
\xNN a character with the hexadecimal value NN 

Bạn đã thử `s/\ r //' như lệnh cuối cùng trong kịch bản của bạn?

Tôi đã quét nhanh trong hầu hết các tệp văn bản, nhưng không tìm thấy bất kỳ thứ gì khiến tôi tin rằng có tùy chọn cmd-line sẽ cung cấp những gì bạn cần.

Như bạn không muốn sử dụng unix2dos, như một hành động của sự lạc quan sheerest, tôi cung cấp các tùy chọn sử dụng tr để cleanout những pesky '\ r của

sed -i -f yourSedScript yourFile 
mv yourFile yourFile.wrk 
tr -d '\015' yourFile.wrk > yourFile 

Cuối cùng, vì nó có vẻ như nếu bạn đang chỉnh sửa các tập tin Unix trên một cửa sổ hộp, bạn phải chuyển các tập tin thông qua 'ftp' hoặc tương tự để có được Unix của bạn để Windows, tại sao không dựa vào các tùy chọn ftp để chuyển đổi kết thúc dòng?

Tôi hy vọng điều này sẽ hữu ích.

+0

Tôi không chuyển tệp. Tôi đang chỉnh sửa các tệp cụ thể của C++ Builder (.dfm), có các dòng mới kiểu Unix mặc dù tôi đang làm việc trên một máy tính Windows. 's/\ r // 'không hoạt động, vì sed sẽ đính kèm \ r \ n ở cuối mỗi dòng một lần nữa – mort

7

GNU sed (http://gnuwin32.sourceforge.net/packages/sed.htm) có tùy chọn -b cho "chế độ nhị phân", i. e. không thay thế \ n bằng \ r \ n.

Nếu bạn sử dụng sed đi kèm với Cygwin thì nó thường sử dụng chế độ nhị phân ngay cả khi không có tùy chọn -b. Cụ thể, lệnh Cygwin sử dụng đường dẫn tệp đầu vào để quyết định xem chúng có chạy trong chế độ văn bản hay nhị phân, i. e. xuất \ r \ n hoặc \ n: http://www.cygwin.com/cygwin-ug-net/using-textbinary.html. Như tài liệu nói, chế độ nhị phân là mặc định cho các tên đường dẫn MS-DOS, và theo kinh nghiệm của tôi, các hệ thống tập tin được gắn theo mặc định cũng được gắn trong chế độ nhị phân.

1

Nếu bạn thêm tham số-b, bạn xử lý tệp dưới dạng tệp nhị phân và nó sẽ không thay đổi kết thúc dòng của bạn. Trạng thái thủ công:

-b, --binary 

      open files in binary mode (CR+LFs are not processed specially) 
Các vấn đề liên quan