Bash: แทนที่คำทั้งหมดที่เกิดขึ้นในคำสั่งสุดท้าย


14

เกือบจะเข้าใจผิดฉันคิดว่าคุณสามารถทำสิ่งที่ชอบ:

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

และที่ทำงานคำสั่งเดียวกันกับการแทนbar2.data bar1.dataทีนี้ถ้าฉันมีคำเป้าหมายหลายครั้งล่ะ ตัวอย่างเช่น:

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

มันจะแทนที่dataส่วนขยายแรกเท่านั้น ฉันจะรับมันเพื่อแทนที่ทั้งสองได้อย่างไร

คำตอบ:


22

ฉันคิดว่า^data^indexเทียบเท่ากับ!!:s/data/indexดังนั้นมันจะแทนที่คำแรกเท่านั้น หากคุณต้องการทดแทนทั้งบรรทัดฉันคิดว่าคุณจะต้องใช้!!:gs/data/index/


การแทนที่ (: gs / data / index) นี้เป็นคุณสมบัติทุบตีหรือมันเป็นการเรียกโปรแกรมอื่นโดยนัย?
JohnTortugo


7

คุณสามารถทำได้โดยการเพิ่ม ^: & ไปยังจุดสิ้นสุด
^: & จะแทนที่สองเหตุการณ์
^: g & จะแทนที่ทั้งหมด

$ cp foo.data bar.data
$ ^ data ^ index ^: &
$ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data
$ ^ data ^ index ^: g &
$ cp foo.index bar.index joe.index doe.index

sidenote: ในหนังสือ 'command line kungfu'
มันบอกว่า ^: & จะแทนที่ทั้งหมด


1
อันที่จริง^:&จะทำทดแทนสองครั้ง ในการทำสิ่งที่เกิดขึ้นทั้งหมดให้ใช้^:g&( gย่อมาจาก "global")
G-Man กล่าวว่า 'Reinstate Monica'

ขอบคุณ! ฉันไม่เคยทดสอบมันมานานกว่าสองครั้ง อ่านคำสั่งในหนังสือ
หมายเหตุ 89
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.