2010-02-17 33 views
23

Thỉnh thoảng tôi sử dụng lệnh bash để thay thế chuỗi trong lệnh trước:Unix lịch sử dòng lệnh thay^foo^bar (cho nhiều thay thế)

^foo^bar 

Hôm nay tôi muốn làm cho việc thay thế trong dòng sau để thay thế tất cả lần xuất hiện của checkbox với `radio:

$ git mv _product_checkbox_buttons.html.erb _product_checkbox_button.html.erb 
$ ^checkbox^radio 
git mv _product_radio_buttons.html.erb _product_checkbox_button.html.erb 

Vì vậy, nó chỉ thay thế lần xuất hiện đầu tiên. Làm cách nào để tôi thay thế tất cả các lần xuất hiện?

bash --version 
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Trả lời

32

man bash nói ^old^new tương đương với !!:s/old/new/. Bạn muốn !!:gs/old/new/ thay thế toàn cầu.

+0

Cảm ơn rất nhiều! Tại thời điểm này, lệnh bash đột nhiên xuất hiện rất xấu và không thể đọc được. Nhưng thật tuyệt vời những gì bạn có thể làm! –

+0

Tôi đồng ý! Đó là g chắc chắn thuộc về cuối! – dubiousjim

+1

Vâng, tôi khá chắc chắn bạn muốn !!: s/cũ/mới/g, vì vậy trong trường hợp của người hỏi ban đầu, bạn muốn !!: s/checkbox/radio/g – Jim

13

Một cách dễ dàng để làm điều này sẽ là:

fc -s checkbox=radio 

Tôi có một bí danh r quy định tại tôi .bashrc:

alias r='fc -s' 

Sau đó, những gì bạn muốn làm trở thành:

r checkbox=radio 

Xem my answer tới "hidden features of bash "câu hỏi để biết chi tiết.

+0

Điều này sẽ là ** câu trả lời **, vì nó rất dễ nhớ và nếu không tôi có google mỗi khi tôi cần phải làm điều này. – xpt

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