Bash: Thay thế tất cả các lần xuất hiện của một từ trong lệnh cuối cùng


14

Hầu như do nhầm lẫn, tôi đã tìm ra bạn có thể làm một cái gì đó như:

$ cp foo.data bar1.data
$ ^bar1^bar2

Và điều đó chạy cùng một lệnh với bar2.datathay vì bar1.data. Bây giờ, làm thế nào nếu tôi có nhiều lần xuất hiện của từ mục tiêu? Ví dụ:

$ cp foo.data bar.data
$ ^data^index

Nó chỉ thay thế dataphần mở rộng đầu tiên . Làm thế nào để tôi có được nó để thay thế cả hai?

Câu trả lời:


22

Tôi nghĩ ^data^indexlà tương đương với !!:s/data/index, vì vậy nó sẽ chỉ thay thế từ đầu tiên. Nếu bạn muốn thay thế toàn bộ dòng, tôi nghĩ bạn sẽ phải sử dụng!!:gs/data/index/


Sự thay thế này (: gs / data / index) là một tính năng bash hoặc nó đang ngầm gọi một chương trình khác?
JohnTortugo


7

Bạn có thể làm điều đó bằng cách thêm ^: & vào cuối.
^: & sẽ thay thế hai lần xuất hiện
^: g & sẽ thay thế tất cả

$ cp foo.data bar.data
$ ^ dữ liệu ^ chỉ mục ^: &
$ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data
$ ^ dữ liệu ^ chỉ số ^: g &
$ cp foo.index bar.index joe.index doe.index

sidenote: trong cuốn sách 'dòng lệnh kungfu',
nó nói rằng ^: & sẽ thay thế tất cả


1
Trên thực tế, ^:&sẽ làm thay thế hai lần . Để thực hiện tất cả các lần xuất hiện, sử dụng ^:g&( gviết tắt của "toàn cầu").
G-Man

Tnx! Tôi không bao giờ thử nghiệm nó trong hơn hai lần xuất hiện. Đọc lệnh trong một cuốn sách.
Note89
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.