在一个单词中移位字母位置

时间:2011-08-21 17:13:06

标签: bash text-processing tr

我想要一个命令/函数,最好是bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回到开头。

e.g。输入stack2输出为cksta

我已经考虑过使用tr,但我无法弄清楚如何使其成为通用的,以便处理任何单词,而不仅仅是翻译目标单词中的特定字母。

3 个答案:

答案 0 :(得分:4)

您可以使用bash的内置字符串操作:

#!/bin/bash

string=$1
shift=$2

length=${#string}
echo ${string:$length-$shift:$shift}${string:0:$length-$shift}

示例:

$ ./script stack 1
kstac
$ ./script stack 2
cksta
$ ./script stack 3
ackst
$ ./script stack 4
tacks

答案 1 :(得分:2)

另一种常见的方法是“加倍”字符串,这简化了子字符串:

str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len}   # -> cksta

答案 2 :(得分:0)

使用负值时要短一些,从右计算:

string=$1
shift=$2
length=${#string}
echo ${string: -shift}${string:0:length-shift}

因为: - 有自己的意思,你必须在它前面留空。