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