2011-06-22 9 views
5

हार्डकोडेड शब्दकोश का उपयोग किये बिना, मैं किसी भी स्ट्रिंग के प्रत्येक अक्षर को बाश में नीचे या ऊपर दिए गए अक्षरों से कैसे बदल सकता हूं?स्ट्रिंग के प्रत्येक अक्षर को दिए गए अक्षरों से कैसे बदलें?

उत्तर

11

आप ROT13 की तरह कुछ मतलब है:

pax$ echo 'hello there' | tr '[a-z]' '[n-za-m]' 
uryyb gurer 

pax$ echo 'hello there' | tr '[a-z]' '[n-za-m]' | tr '[a-z]' '[n-za-m]' 
hello there 

एक अधिक सामान्य समाधान जहां एक मनमाना रोटेशन (26 के माध्यम से 0) प्रदान करना चाहते हैं के लिए, आप उपयोग कर सकते हैं:

#!/usr/bin/bash 

dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
phrase='hello there' 
rotat=13 
newphrase=$(echo $phrase | tr "${dual:0:26}" "${dual:${rotat}:26}") 
echo ${newphrase} 
+0

बिल्कुल मुझे क्या चाहिए। – Euphorbium

+0

अपने वितरण की जांच करें, '/ usr/bin' या'/usr/games' में 'rot13' टूल हो सकता है जो ऐसा करने का एक और तरीका होगा। – Sorpigal

2
$ alpha=abcdefghijklmnopqrstuvwxyz 
$ rot=3 
$ sed "y/${alpha}/${alpha:$rot}${alpha::$rot}/" <<< 'foobar' 
irredu 
+0

यह रास्ता अधिक लचीला दिखता है। क्या यह xyz के लिए rot = 3 के साथ काम करता है? हाँ यह करता है। मेरे द्वारा +1 – sehe

संबंधित मुद्दे