2012-05-14 18 views
7

Tôi có một máy Linux (Red Hat Linux 5.1) và tôi cần thêm tác vụ sau vào tập lệnh Bash của mình.Lệnh Linux hoặc cú pháp Bash để tính ký tự ASCII tiếp theo

Cú pháp lệnh hoặc cú pháp Bash nào sẽ tính toán ký tự ASCII tiếp theo?

Ghi chú - cú pháp lệnh cũng có thể là AWK/Perl, nhưng cú pháp này phải nằm trong tập lệnh Bash của tôi.

Ví dụ:

input     results 

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

bạn muốn điều gì xảy ra nếu đầu vào của bạn là z/Z? – Levon

+0

trường hợp logic không hợp lệ này (tôi cần đến z hoặc Z !!!) –

Trả lời

4

Perl của ++ operator cũng xử lý chuỗi, đến một mức độ nào đó:

perl -nle 'print ++$_' 

Tùy chọn -l với autochomp là cần thiết tại đây, kể từ a\n ví dụ nếu không sẽ trả lại 1.

+0

giải pháp ngắn và đẹp –

+0

nó không hoạt động với một số ký tự – user37421

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

Interactive:

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

không tương tác:

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

Điều này không giới hạn chính nó đến đầu vào hoặc đầu ra ASCII. –

8

Sử dụng dịch (tr):

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

It in:

bB nN zZ

+0

sử dụng hoàn hảo cho tr. Với bash, bạn có thể viết 'printf '% s -> tiếp theo là% s \ n'" $ input "" $ (tr 'a-yA-Y' 'b-zB-Z' <<< "$ input") "' –

0

Giá trị vật:

c="a" 

Để chuyển đổi nhân vật với giá trị ASCII của nó:

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

Giá trị bạn muốn thêm vào giá trị ASCII này:

add=1 

Để thay đổi giá trị ASCII bằng cách thêm $ add vào nó:

((v+=add)) 

Để chuyển đổi kết quả để char:

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

tôi đã sử dụng -X để vô hiệu hóa tất cả các cảnh báo


Bạn có thể kết hợp tất cả trong số này trong một dòng và đặt kết quả trong vairable $ r:

c="a"; add=1; r=$(perl -X -e "printf('%c', $(($add+$(printf %d "'$c"))));") 

bạn có thể in kết quả:

echo "$r" 

Bạn có thể thực hiện một chức năng để trả lại kết quả:

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

bạn có thể sử dụng chức năng:

x=$(achar "a" 1) // x = the character that follows a by 1 

hoặc bạn có thể tạo vòng lặp:

array=(a k m o) 
for l in "${array[@]}" 
do 
    echo "$l" is followed by $(achar "$l" 1) 
done 
Các vấn đề liên quan