2011-09-23 39 views
6

Tôi đang cố chạy các lệnh shell đơn giản trong tập lệnh của mình, nhưng không thể loại bỏ các dòng mới ngay cả khi sử dụng chomp hoặc cắt.Loại bỏ dòng mới khỏi các lệnh shell trong Ruby

Có điều gì tôi thiếu không?

 u=`echo '#{l}' | cut -d: -f4`.chop() 
     p2=`echo '#{l}' | cut -d: -f3`.chop() 
     p1=`echo '#{l}' | cut -d: -f2`.chop() 
     h=`echo '#{l}' | cut -d: -f1`.chop() 


#  **Cant get newlines to go after p1 and p2 !! ??** 
     path="#{p1}/server/#{p2}abc" 
     puts path 


Output: 
/usr (p1) 
/server 
/bin (p2) abc 
Expected Output: 
/usr/server/binabc 

Mọi đề xuất?

Theo một số gợi ý, thay đổi mã của tôi để:

h, p1, p2, u = l.split /:/ 
u.strip 
u.chomp 

puts u.inspect 

Output: "string\n"

Về cơ bản tôi đã cố gắng sử dụng chomp trước và được đánh cùng một vấn đề. Tôi có cần phải gọi chomp theo cách khác hoặc thêm bất kỳ đá quý nào không?

+0

gì chính xác là vấn đề? Sản lượng dự kiến ​​là gì? – Geo

Trả lời

7

Sử dụng String#strip để xóa tất cả khoảng trắng gói hoặc String#chomp (lưu ý 'm') để xóa một dòng chỉ đơn lẻ mới.

String#chop xóa ký tự cuối cùng (hoặc cặp \r\n) có thể nguy hiểm nếu lệnh không luôn kết thúc bằng một dòng mới.

Tôi giả sử rằng mã của bạn không hoạt động vì kết quả có nhiều dòng mới \ khoảng trắng ở cuối đầu ra. (Và nếu vậy, strip sẽ hoạt động cho bạn.) Tuy nhiên, bạn có thể xác minh điều này bằng cách xóa cuộc gọi đến chop và sau đó sử dụng p u hoặc puts u.inspect để xem những ký tự nào thực sự ở đầu ra.

Và đối với thông tin của bạn, thành ngữ trong Ruby sẽ bỏ qua dấu ngoặc đơn khi gọi các phương thức không có đối số, ví dụ: u = foo.chop.

+0

Thanx @phrogz. Tôi đăng đầu ra của u.inspect. Tôi vẫn gặp vấn đề tương tự, tôi không gọi nó đúng cách sao? – codeObserver

+0

@codeObserver Sử dụng 'u.chomp' sẽ không làm gì cả vì đây là phiên bản không biến đổi của phương thức. Bạn cần phải thực hiện 'u.chomp!' Hoặc 'u = u.chomp'. Tương tự với '.strip' so với' .strip! '. – Phrogz

+0

thnx. Điều đó đã sửa nó. – codeObserver

3

str.chomp wll xóa ký tự dòng mới khỏi chuỗi. str.chop chỉ xóa ký tự cuối cùng.

2

Tại sao các bạn gọi ra vỏ cho một cái gì đó đơn giản như vậy:

h, p1, p2, u = l.split /:/ 
+0

thnx glenn. Về cơ bản tôi vẫn đang học Ruby và cố gắng chuyển một số kịch bản lệnh shell sang Ruby. Vì vậy, như là một iteration đầu tiên cố gắng để chỉ chạy shell lệnh nguyên bản trong một cấu trúc ruby ​​và sau đó tôi sẽ có một pass để loại bỏ các un-cần thiết – codeObserver

+0

Sau đó, 'chomp' là những gì bạn muốn. –

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