7

我有一台 Linux 机器(Red Hat Linux 5.1),我需要将以下任务添加到我的 Bash 脚本中。

哪个 Linux 命令或 Bash 语法将计算下一个 ASCII 字符?

备注 - 命令语法也可以是AWK /Perl,但此语法必须在我的 Bash 脚本中。

例子:

 input                  results

 a    --> the next is   b
 c    --> the next is   d
 A    --> the next is   B
4

5 回答 5

8

使用翻译 ( tr):

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

它打印:

bB nN zZ

于 2012-05-14T21:57:51.457 回答
4

Perl 的++运算符在一定程度上也处理字符串:

perl -nle 'print ++$_'

-l这里需要带有 autochomp的选项,因为a\nexample 否则会返回1.

于 2012-05-14T21:58:57.303 回答
3

您可以为 Bash使用chr()和函数(请参阅如何将 ASCII 字符转换为其十进制(或十六进制)值并返回?):ord()

# POSIX
# chr() - converts decimal value to its ASCII character representation
# ord() - converts ASCII character to its decimal value
于 2012-05-14T21:52:44.773 回答
0
perl -le "print chr(ord(<>) + 1)"

交互的:

breqwas@buttonbox:~$ perl -le "print chr(ord(<>) + 1)"
M
N

非交互:

breqwas@buttonbox:~$ echo a | perl -le "print chr(ord(<>) + 1)"
b
于 2012-05-14T21:56:01.037 回答
0

字符值:

c="a"

要将字符转换为其 ASCII 值:

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

您要添加到此 ASCII 值的值:

add=1

通过向其添加 $add 来更改其 ASCII 值:

((v+=add))

要将结果转换为 char:

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

我曾经-X禁用所有警告


您可以将所有这些组合在一行中,并将结果放入变量 $r 中:

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

您可以打印结果:

echo "$r"

您可以创建一个函数来返回结果:

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

您可以使用以下功能:

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

或者你可以做一个循环:

array=( a k m o )
for l in "${array[@]}"
do
     echo "$l" is followed by $(achar "$l" 1)
done
于 2016-08-24T05:35:25.073 回答