अंतिम आदेश में सभी उदाहरणों के लिए x ^ y यूनिक्स चाल?


97

मेरी पसंदीदा यूनिक्स ट्रिक्स में से एक है ^x^y, जो अंतिम कमांड लेगी और "x" के पहले उदाहरण को "y" से बदल देगी। हालांकि, मैं सोच रहा हूं कि क्या एक समान चाल अंतिम कमांड में "y" के साथ "x" के सभी उदाहरणों को बदलने के लिए काम करती है ?


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
@ यह आदेश मेरे लिए सिर्फ पहला उदाहरण बदल रहा है। [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) -release।
स्लम

@ एसएलएम जीएनयू बैश, संस्करण 3.2.25 (1) -release (x86_64-redhat-linux-gnu) कॉपीराइट (C) 2005 फ्री सॉफ्टवेयर फाउंडेशन, इंक।
Geek

@ गीक - बहुत पुराना संस्करण, इस सुविधा की पेशकश नहीं करता है।
स्लम

45

मेरा मानना ​​है कि हर घटना ^string1^string2को bashबदलने के लिए कुछ जोड़ने का एक आसान तरीका है । जैसा कि स्लम बताते हैं, आपको लिखना होगा !!: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

वाह, यह वास्तव में बहुत साफ है
मेसन

2

मेरा मानना ​​है कि सबसे अच्छा विकल्प ": &" का उपयोग करना है

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

3
यह 2 घटनाओं को प्रतिस्थापित करता है, उन सभी को नहीं (इस उदाहरण में सभी अच्छी तरह से केवल 2 घटनाएं हैं, लेकिन सामान्य मामले में नहीं)। आपको :&अधिक से अधिक जोड़ने की आवश्यकता होगी क्योंकि प्रतिस्थापित करने के लिए अधिक घटनाएं हैं।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.