जवाबों:
यहाँ एक सीधा तरीका है sed:
$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/'
QwErTy
या GNU के साथ एक छोटा तरीका sed, किसी भी चरित्र के साथ काम करना जिसके लिए लोअरकेस <-> अपरकेस रूपांतरण आपके लोकेल में मौजूद है:
$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g'
QwErTy
यदि आप किसी अन्य उपकरण का उपयोग कर सकते हैं, जैसे:
perl (ASCII पत्रों तक सीमित):
$ echo qWeRtY | perl -pe 'y/[a-z][A-Z]/[A-Z][a-z]/'
QwErTy
perl (आम तौर पर):
$ echo 'αΒγ' | perl -Mopen=locale -pe 's/(\p{Ll})|(\p{Lu})/uc($1).lc($2)/ge'
ΑβΓ
sedइनपुट में एक GNU और वैकल्पिक मामले को मानता है । sed -re 's/([[:lower:]]?)([[:upper:]]?)/\U\1\L\2/g'इसके बजाय (अभी भी जीएनयू विशिष्ट) का उपयोग करें । पहला केवल 26 ASCII लैटिन अक्षरों को परिवर्तित करता है, जबकि दूसरा आपके स्थानीय द्वारा पहचाने गए किसी भी अक्षर को परिवर्तित करता है। trएक केवल ASCII स्थानों में समझ में आता है। perlएक केवल ASCII लैटिन अक्षरों के लिए काम करता है।
POSIXly, जो आपके sedद्वारा @cuonglm दिखाए जाने के रूप में लिप्यंतरित करने के लिए इच्छित अक्षरों का पूरा सेट प्रदान करने के अलावा नहीं किया जा सकता है ।
यह trहालांकि के साथ किया जा सकता है , और यही वह trहै जो (ट्रांसपेरेंट) है:
tr '[:lower:][:upper:]' '[:upper:][:lower:]'
हालाँकि, लिनक्स पर, इसकी सीमाएँ हैं। trआमतौर पर लिनक्स आधारित प्रणालियों पर पाए जाने वाले 3 कार्यान्वयनों में से:
tr, यह केवल सिंगल-बाइट कैरेक्टर सेट के लिए काम करता है। उदाहरण के लिए, Stéphane ChazelasUTF-8 स्थानों पर, sTéPHANE cHAZELASइसके बजाय देता है sTÉPHANE cHAZELAS। यह GNU की एक ज्ञात सीमा है tr।trविरासत toolchest, वह काम नहीं करता से (आप प्राप्त stéphane chazelas)।trकरेगा।FreeBSD पर जो हालांकि ठीक काम करता है। आप इसे प्रमाणित यूनिक्स प्रणालियों में भी ठीक काम करने की उम्मीद करेंगे।
bashखोल कि के लिए एक समर्पित ऑपरेटर है:
in=AbCdE
out=${in~~}
के साथ zsh -o extendedglob:
out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}
ⴠ(e2 b4 a0) Ⴠ(e1 83 80) है; दोनों i(69) और ı(सी 4 बी 1) है I(49) के रूप में अपरकेस (तुर्की स्थानों जहां को छोड़कर iहो जाता है İ)। जीएनयू के साथ काम नहीं करने का कारण यह trहै कि जीएनयू trबाइट्स के साथ काम करता है न कि पात्रों के साथ।
[:lower:]या [:upper:](इसलिए पहले वाले को नजरअंदाज किया जाता है)। फ्रेंच में भी, œ -> Œहै c5 93 -> c5 92UTF-8 में और bd -> bciso8859-15 में।
यद्यपि इसमें वही सीमाएँ हैं जिनका उल्लेख trस्टीफन चेज़लस द्वारा प्रस्तुत समाधान के रूप में किया गया है , यह इसे करने का एक और तरीका है:
{ echo QWERTYqwerty | dd conv=lcase
echo QWERTYqwerty | dd conv=ucase
} 2>/dev/null
qwertyqwerty
QWERTYQWERTY
मैं डंप stderrमें /dev/nullवहाँ क्योंकि ddयह भी पर अपने सभी आपरेशनों के आँकड़े उपलब्ध कराता है 2फ़ाइल वर्णनकर्ता। आप जो कर रहे हैं उसके आधार पर यह उपयोगी हो सकता है, लेकिन इस प्रदर्शन के लिए नहीं था। अन्य सभी सामान जो आप ddअभी भी लागू कर सकते हैं , उदाहरण के लिए:
echo QWERTYqwerty | dd bs=1 cbs=6 conv=unblock,ucase 2>/dev/null
QWERTY
QWERTY
aBcपरिवर्तित नहीं है AbC)।
यदि आपका मुख्य उद्देश्य किसी फ़ाइल को लोअरक्लास से अपरकेस में बदलना है, तो आप इसका उपयोग क्यों नहीं करते trऔर STDOUTअपनी फ़ाइल को परिवर्तित करने के लिए:
$cat FILENAME | tr a-z A-Z > FILENAME2
FILENAMEआपकी मूल फ़ाइल कहां है FILENAME2आपकी परिवर्तित आउटपुट फ़ाइल कहाँ है
éउदाहरण के लिए (कम से कम मेरी फ़ाइल में)।
का उपयोग कर awk:
awk '{print tolower($0)}' file.txt | tee file.txt
>file.txtफ़ाइल को
ruby उसके लिए एक स्ट्रिंग विधि है, जैसे कमांड लाइन से समान उपयोग perl
$ echo 'qWeRtY' | ruby -pe '$_.swapcase!'
QwErTy
रूबी-डॉक एनकोडिंग भी देखें
$ ruby -e 'puts Encoding.default_external'
UTF-8
$ echo 'αΒγ' | ruby -pe '$_.swapcase!'
ΑβΓ
साधारण बात को सरल रखो। अक्षरों का अनुवाद करने के लिए डिज़ाइन किया गया फ़िल्टर है tr।
echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]
trसे अधिक उपयुक्त होगाsed।