หนึ่งในเทคนิค 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
เปลือก?