लोअरकेस में तब्दील सभी अक्षरों के साथ अंतिम कमांड चलाएं


15

कई बार मैंने अपरकेस (शायद क्योंकि CapsLockचालू था) में सभी पत्रों के साथ एक कमांड चलाया है , और मैंने Enterइसे साकार करने से पहले दबाया ।

मैं निचले अक्षरों में तब्दील सभी अक्षरों के साथ अंतिम कमांड कैसे चला सकता हूं?


शर्म करो तुम zsh का उपयोग नहीं कर रहे हैं। !!:l
केविन

जवाबों:


19

आपको लगता है कि पूरा कर सकते हैं (मैं इसे कहते निम्नलिखित छोटे समारोह जोड़कर ??बहुत सरल हो सकता है, लेकिन आप इस इच्छानुसार बदल सकते हैं) अपने में .bashrcफ़ाइल:

?? () { "${@,,}"; }

अगला, जब आप चलेंगे:

?? !!

अंतिम कमांड लोअरकेस में सभी अक्षरों के साथ चलाया जाएगा।

व्याख्या

  • !!: यह बैश के इतिहास के उपकरण का हिस्सा है, विशेष रूप से, यह अंतिम कमांड रन तक फैलता है । इसलिए, उदाहरण के लिए, echo !!इस विशेष शेल सत्र में अंतिम कमांड रन आउट को प्रिंट करेगा।
  • "${@,,}: निर्माण सभी निचले अक्षरों में परिवर्तित चर ${foo,,} की सामग्री को परिवर्तित करेगा$foo$@स्थितीय मापदंडों का सरणी है। जब किसी फ़ंक्शन के अंदर उपयोग किया जाता है, तो यह उस फ़ंक्शन को दिए गए मापदंडों तक विस्तारित होता है।

इसलिए, "${@,,}"जो भी फंक्शन में पास किया गया था उसे लोअरकेस में बदल देगा और फिर उसे निष्पादित करेगा। इसलिए, ??फ़ंक्शन !!को एक पैरामीटर के रूप में चलाने से अंतिम कमांड को लोअरकेस में बदल जाएगा और इसे चलाएगा।


7
शायद आप इस बात का स्पष्टीकरण जोड़ सकते हैं कि यह कैसे काम करता है? यह आपके द्वारा लिखे गए तरीके से बहुत गूढ़ है। इसके अलावा, यह वास्तव में काम नहीं करता है, जैसे कि। जैसा कि आपने इसे लिखा है, यह तभी सही ढंग से काम करेगा जब आपका PWD खाली हो। आपको उद्धृत करने की आवश्यकता है "!!"
टेराडॉन

1
@terdon अब, ग्लेन के लिए धन्यवाद, इसे किसी भी मामले में काम करना चाहिए ... और समझाने के लिए बहुत ज्यादा कुछ नहीं है: फ़ंक्शन ??अपने तर्क पत्रों को लोअरकेस में परिवर्तित करता है और !!वर्तमान कमांड में पिछली कमांड को स्वचालित रूप से लिखता है (इसलिए इसे ??लेता है) पिछले कमांड को तर्क दें)।
रादु राईडेनू

6
`गूंज !! | tr '[: अपर:]' '[: लोअर:]' `

कुंजी `(बैकटिक्स) कोटेशन में है - जो आउटपुट को कमांड के रूप में चलाता है।


2
मार्कअप लैंग्वेज के कारण बैकटिक्स जहां उत्तर के पहले संस्करण में अदृश्य है। इसके लिए (टिप्पणी के बिना) नीचे जाने की आवश्यकता नहीं है; बस संपादित करें।
रमनो

trमेरी पहली पसंद भी होगी। यह भी काम करता है ( $( echo !! | tr '[A-Z]' '[a-z]')
बैकटिक्स के

4

यहाँ एक प्रोग्रामर जवाब आता है .... अजगर का उपयोग करें:

`echo "print '!!'.lower()" | python`

या रूबी:

`echo "print '!!'.downcase" | ruby`

या पर्ल (शायद मेरा पसंदीदा):

`perl -e "print lc('!!');"`

या PHP:

`php -r "print strtolower('!!');"`

या अवाक्:

`echo "!!" | awk '{ print tolower($1) }'`

या पाल:

`echo "!!" | sed 's/./\L&/g'`

या बैश:

str="!!" ; ${str,,}

या zsh

echo "A='!!' ; \$A:l" | zsh

या अगर आपके पास NodeJS है:

`echo "console.log('!!'.toLowerCase());" | node`

आप भी इस्तेमाल कर सकते हैं dd(लेकिन मैं नहीं!):

 `echo "!!" | dd  conv=lcase 2> /dev/null`

आप नौकरी करने के लिए एक छोटी स्क्रिप्ट भी बना सकते हैं:

sudo bash -c 'cat << EOF > /usr/local/bin/lower
#!/usr/bin/python
import fileinput
print "".join(fileinput.input()).lower(),
EOF' && sudo chmod +x /usr/local/bin/lower

जो आप इस तरह का उपयोग करें:

`echo !! | lower`

1

और एक के साथ sed,

$(echo !! | sed 's/^\(.*\)$/\L\1/g')

उदाहरण:

$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')

आउटपुट:

$(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g')
[sudo] password for avinash: 
0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.