到目前为止,代码只更改了第一个字母。如果我采取突破,那么它会不止一次地更改一个字母的每个实例(这很糟糕)。我只是在尝试使用 sed 的凯撒密码。我意识到我可以使用 tr 来执行文本转换,但我更愿意坚持使用 sed。
echo "What number do you want to use for the shift?"
read num
declare -A origin
x=({a..z})
case "$num" in
0)
y=({a..z});;1)y=({{b..z},a});;2)y=({{c..z},a,b});;3)y=({{d..z},a,b,c});;4)y=({{e..z},a,b,c,d});;5)y=({{f..z},{a..e}});;
6)y=({{g..z},{a..f}});;7)y=({{h..z},{a..g}})
;;
8)
y=({{i..z},{a..h}})
;;
9)
y=({{j..z},{a..i}})
;;
10)
y=({{k..z},{a..j}})
;;
11)
y=({{l..z},{a..k}})
;;
12)
y=({{m..z},{a..l}})
;;
13)
y=({{n..z},{a..m}})
;;
14)
y=({{o..z},{a..n}})
;;
15)
y=({{p..z},{a..o}})
;;
16)
y=({{q..z},{a..p}})
;;
17)
y=({{r..z},{a..q}})
;;
18)
y=({{s..z},{a..r}})
;;
19)
y=({{t..z},{a..s}})
;;
20)
y=({{u..z},{a..t}})
;;
21)
y=({{v..z},{a..u}})
;;
22)
y=({{w..z},{a..v}})
;;
23)
y=({{x..z},{a..w}})
;;
24)
y=({{y..z},{a..x}})
;;
25)
y=({{z..z},{a..y}})
;;
*)
echo "Sorry, you must use a shift from 0 to 25."
;;
esac
for i in {0..25}
do
origin[${x[i]}]=${y[i]}
done
for i in {0..25}
do
origin[${x[i]}]=${y[i]}
done
for a in "${!origin[@]}"
do
for x in "${!origin[@]}"
do
sed -i 's/'${x}'/'${origin[${x}]}'/g' test.txt
break
done
done