2012-05-14 10 views
7

की गणना करता है मेरे पास एक लिनक्स मशीन (Red Hat Linux 5.1) है, और मुझे निम्न कार्य को मेरी बैश स्क्रिप्ट में जोड़ना होगा।लिनक्स कमांड या बैश सिंटैक्स जो अगले ASCII वर्ण

कौन सा लिनक्स कमांड या बैश सिंटैक्स अगले ASCII चरित्र की गणना करेगा?

टिप्पणी - कमांड सिंटैक्स भी AWK/पर्ल हो सकता है, लेकिन यह वाक्यविन्यास मेरी बैश स्क्रिप्ट में होना चाहिए।

उदाहरण:

input     results 

a --> the next is b 
c --> the next is d 
A --> the next is B 
+0

यदि आपका इनपुट z/Z है तो आप क्या करना चाहते हैं? – Levon

+0

यह तार्किक मामला नहीं है (मुझे ज़ेड या जेड तक की आवश्यकता है !!!) –

उत्तर

4

पर्ल के ++ operator भी एक हद तक, तार संभालता है:

perl -nle 'print ++$_' 

-l ऑटोचॉम्प के साथ विकल्प यहां आवश्यक है, क्योंकि a\n उदाहरण के लिए 1 वापस आ जाएगा।

+0

छोटा और अच्छा समाधान –

+0

यह कुछ पात्रों के साथ काम नहीं करता है – user37421

0
perl -le "print chr(ord(<>) + 1)" 

इंटरएक्टिव:

[email protected]:~$ perl -le "print chr(ord(<>) + 1)" 
M 
N 

गैर-इंटरैक्टिव:

[email protected]:~$ echo a | perl -le "print chr(ord(<>) + 1)" 
b 
+0

यह स्वयं को ASCII इनपुट या आउटपुट तक सीमित नहीं करता है। –

8

उपयोग का अनुवाद (tr):

echo "aA mM yY" | tr "a-yA-Y" "b-zB-Z" 

यह प्रिंट:

bB nN zZ

+0

tr के लिए सही उपयोग। बैश के साथ, आप 'printf'% s लिख सकते हैं -> अगला% s \ n '"$ इनपुट" "$ (tr' a-yA-y '' b-zB-Z '<<<" $ इनपुट ") "' –

0

चरित्र मूल्य:

c="a" 

अपने ASCII मूल्य के चरित्र बदलने के लिए:

v=$(printf %d "'$c") 

मूल्य आप इस ASCII मूल्य में जोड़ना चाहते हैं:

add=1 

करने के लिए इसमें $ add जोड़कर अपने ASCII मान को बदलें:

((v+=add)) 

चार करने के लिए परिणाम बदलने के लिए:

perl -X -e "printf('The character is %c\n', $v);" 

मैं -X इस्तेमाल किया सभी चेतावनियों


आप एक पंक्ति में इन सब को जोड़ सकते हैं अक्षम करें और vairable में परिणाम डाल करने के लिए $ आर:

c="a"; add=1; r=$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));") 
x=$(achar "a" 1) // x = the character that follows a by 1 

या:

achar() 
{ 
    c="$1"; add=$2 
    printf "$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));")" 
} 

आप फ़ंक्शन का उपयोग कर सकते हैं: परिणाम वापस जाने के लिए

echo "$r" 

आप एक समारोह बना सकते हैं:आप परिणाम मुद्रित कर सकते हैं आप एक लूप बना सकते हैं:

array=(a k m o) 
for l in "${array[@]}" 
do 
    echo "$l" is followed by $(achar "$l" 1) 
done 
संबंधित मुद्दे