我想创建一个寻找特殊数字的脚本。
这样的数字153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3
bash script 153 3
153
在我的剧本中,我有这样的事情
echo "$1" | tr -d " " | sed -e 's/\([[:digit:]]\)/\1+/g' | tr '+' '^"$2"+'
最后一个命令不起作用,它确实会改变某些内容,它会将1+5+3+
更改为1^+5^+3^+
所以我的问题是:如何在tr中使用变量?
答案 0 :(得分:1)
tr
将一个字符替换为另一个字符。它不能用更长的字符串替换一个字符。这是sed
的工作:
set -- 153 3
echo "$1" | \
tr -d " " | \
sed -e 's/\([[:digit:]]\)/\1^'"$2"'+/g; s/\+$//'
答案 1 :(得分:0)
choroba的回答是正确的。这是一个基于python的单行:
$ set -- 153 3
$ python -c "print '+'.join([x+'^$2' for x in list('$1')])"
1^3+5^3+3^3
说明:
"153"
转换为['1', '5', '3']
['1^3', '5^3', '3^3']
'+'
注意:唯一的原因是我添加了这个答案是因为,这不需要在内置函数处理后调整完成的字符串。
以下是其他常见方法:
$ python -c "print '^$2+'.join(list('$1')) + '^$2'" # Add "^3" after join returns "1^3+5^3+3"
$ echo $1 | sed "s/./&^$2+/g; s/+$//" # Remove last '+' sign from "1^3+5^3+3^3+"