如何使用grep/sed/awk来实现:
输入:一个由小数、数字运算符和圆括号组成的语句,中间可以有制表符和空格:
2 + 5* 61.2 -(32.5+7)/ 8
输出:一个字符串,包含每个标记(小数、运算符或括号),用单个逗号分隔:
2,+,5,*,61.2,-,(,32.5,+,7,),/,8
正则表达式+ grep/sed/awk可以实现这个吗?
您可以使用以下sed
解决方案:
s='2 + 5* 61.2 -(32.5+7)/ 8'
sed -E 's~[[:blank:]]*([0-9]+(.[0-9]+)?|[+/*()-])[[:blank:]]*~1,~g; s/,$//' <<< "$s"
2,+,5,*,61.2,-,(,32.5,+,7,),/,8
echo '2 + 5* 61.2 -(32.5+7)/ 8' |
sed -Ee 's:[0-9]+(.[0-9]+)?|[-+*/()]:&,:g'
-e 's/[[:blank:]]+//g'
-e 's/,$//'
给:
2,+,5,*,61.2,-,(,32.5,+,7,),/,8
对匹配整数、十进制数或六个字符-+*/()
之一的正则表达式进行全局替换。然后删除制表符和空格,以及后面的逗号。
$ sed -E 's/ |t//g;s/([-+*/)(])/,1,/g;s/,+/,/g' <<<"2 + 5* 61.2 -(32.5+7)/ 8"
2,+,5,*,61.2,-,(,32.5,+,7,),/,8