หนึ่งในเทคนิค Unix ที่ฉันโปรดปรานคือการ^x^yใช้คำสั่งสุดท้ายและแทนที่อินสแตนซ์แรกของ "x" ด้วย "y" แต่ฉันสงสัยว่าถ้าเป็นเคล็ดลับที่คล้ายกันทำงานเพื่อแทนที่ทุกกรณีของ "x" กับ "Y" ในคำสั่งสุดท้าย?
หนึ่งในเทคนิค Unix ที่ฉันโปรดปรานคือการ^x^yใช้คำสั่งสุดท้ายและแทนที่อินสแตนซ์แรกของ "x" ด้วย "y" แต่ฉันสงสัยว่าถ้าเป็นเคล็ดลับที่คล้ายกันทำงานเพื่อแทนที่ทุกกรณีของ "x" กับ "Y" ในคำสั่งสุดท้าย?
คำตอบ:
คุณสามารถใช้!!: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
[subhrcho@slc04lyo pcbpel]$ echo "hat that bat" hat that bat [subhrcho@slc04lyo pcbpel]$ !!:gs/at/xx/ echo "hxx that bat" hxx that bat. ฉันพลาดอะไรไป
bash --version= 4.2.45 (1) - ปล่อย
ฉันไม่เชื่อว่ามีวิธีง่ายๆในการเพิ่มสิ่งที่^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
ฉันเชื่อว่าตัวเลือกที่ดีที่สุดคือใช้ ": &"
$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat
:&ที่สุดเท่าที่จะมีการแทนที่เกิดขึ้นอีก
command-historyแท็กสำหรับสิ่งนั้น ที่เพิ่ม นอกจากนี้ฉันคิดว่าคุณหมายถึงbashเปลือก?