tr中的脚本变量

时间:2015-01-05 09:01:26

标签: bash variables tr

我想创建一个寻找特殊数字的脚本。

这样的数字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中使用变量?

2 个答案:

答案 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

说明:

  1. list会将字符串"153"转换为['1', '5', '3']
  2. [x +' ^ $ 2' for x in< list> ]被称为列表理解。实际上它会返回另一个列表:['1^3', '5^3', '3^3']
  3. 然后与'+'
  4. 加入

    注意:唯一的原因是我添加了这个答案是因为,这不需要在内置函数处理后调整完成的字符串。

    以下是其他常见方法:

    $ 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+"