我想交换两个字符串的位置,例如1A to A1
,2B to B2
bash有可能吗?
现在我以愚蠢的方式做这件事
case "$Zone" in
1A)
Zone="A1"
;;
2A)
Zone="A2"
;;
3A)
Zone="A3"
;;
4A)
Zone="A4"
;;
1B)
Zone="B1"
;;
2B)
Zone="B2"
;;
3B)
Zone="B3"
;;
4B)
Zone="B4"
;;
E)
Zone="E"
;;
esac
有没有更明智的方法?
答案 0 :(得分:3)
如果您碰巧只有1或2个字符的字符串,则可以将其反转。哦,UNIX中有rev
命令:
zone=$(echo "$zone" | rev)
甚至更短
zone=$(rev <<< "$zone")
参见示例:
$ zone="E"
$ rev <<< "$zone"
E
$ zone="A1"
$ rev <<< "$zone"
1A
来自man rev
:
rev — reverse lines of a file or files
答案 1 :(得分:3)
您的要求不明确,输入的可能性有哪些?如果只有number + A or B
模式有效且需要处理?
我认为你需要验证,而这个单线程就可以完成这项任务:
awk -v FS='' '/^[1-5][A-L]$/{$0=$2""$1}7'
一些例子:
kent$ echo "1A
2A
3B
3X
E
foo"|awk -v FS='' '/^[1-5][A-L]$/{$0=$2""$1}7'
A1
A2
B3
3X
E
foo
你只有在
时才会看到2
[1-5]
A-L
它会被逆转,否则,它会保持不变。
答案 2 :(得分:2)
如果反向字符串有效,那就试一试
x=$(echo $zone | rev)
希望有所帮助:)
答案 3 :(得分:0)
使用子字符串扩展来获取字符串的第二个和第一个字符:
Zone=${Zone:1:1}${Zone:0:1}