^ x ^ y unix หลอกลวงสำหรับอินสแตนซ์ทั้งหมดในคำสั่งสุดท้ายหรือไม่


97

หนึ่งในเทคนิค Unix ที่ฉันโปรดปรานคือการ^x^yใช้คำสั่งสุดท้ายและแทนที่อินสแตนซ์แรกของ "x" ด้วย "y" แต่ฉันสงสัยว่าถ้าเป็นเคล็ดลับที่คล้ายกันทำงานเพื่อแทนที่ทุกกรณีของ "x" กับ "Y" ในคำสั่งสุดท้าย?


2
คุณลักษณะนี้เรียกว่าการขยายประวัติ ดูเหมือนว่าเราจะใช้command-historyแท็กสำหรับสิ่งนั้น ที่เพิ่ม นอกจากนี้ฉันคิดว่าคุณหมายถึงbashเปลือก?
มิเคล

คำตอบ:


107

คุณสามารถใช้!!:gs/search/replace/สัญลักษณ์เพื่อทำสิ่งที่คุณต้องการ สิ่งนี้ใช้การค้นหาทั่วโลก & แทนที่ ( :gs):

ก่อน

$ echo "harm warm swarm barm"
harm warm swarm barm

หลังจาก

$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born

อ้างอิง


1
@slm คำสั่งนี้แทนที่เพียงอินสแตนซ์แรกสำหรับฉัน [subhrcho@slc04lyo pcbpel]$ echo "hat that bat" hat that bat [subhrcho@slc04lyo pcbpel]$ !!:gs/at/xx/ echo "hxx that bat" hxx that bat. ฉันพลาดอะไรไป
Geek

@Geek - distro ของคุณคืออะไร? คุณใช้ Bash หรือเปล่า รุ่น? bash --version= 4.2.45 (1) - ปล่อย
slm

@slm GNU bash, รุ่น 3.2.25 (1) - ปล่อยออกมา (x86_64-redhat-linux-gnu) ลิขสิทธิ์ (C) 2005 มูลนิธิซอฟต์แวร์เสรี, Inc.
Geek

@Geek - รุ่นเก่าเกินไปไม่มีคุณสมบัตินี้
slm

45

ฉันไม่เชื่อว่ามีวิธีง่ายๆในการเพิ่มสิ่งที่^string1^string2จะทำเพื่อbashแทนที่ทุกเหตุการณ์ ในฐานะที่เป็น SLM !!:gs/string1/string1ชี้ให้เห็นคุณต้องเขียน

แต่ในzshคุณสามารถเพิ่ม:G:

$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar

ในทั้งสองbashและzshคุณยังสามารถใช้fc -sดังนี้:

$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar

สิ่งนี้มักถูกสร้างเป็นนามแฝงที่เรียกว่าrดังนั้นคุณสามารถทำได้:

$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar

ว้าวนี่ก็เรียบร้อยจริงๆด้วย
Mason

2

ฉันเชื่อว่าตัวเลือกที่ดีที่สุดคือใช้ ": &"

$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat

3
ที่แทนที่2เหตุการณ์ไม่ใช่ทั้งหมด (ดีทั้งหมดในตัวอย่างนี้เนื่องจากมีเพียง 2 เหตุการณ์ แต่ไม่ใช่ในกรณีทั่วไป) คุณจะต้องเพิ่มให้มาก:&ที่สุดเท่าที่จะมีการแทนที่เกิดขึ้นอีก
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.