如何使用shell regex命令将输入行分割为小数和操作符的令牌?



如何使用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

相关内容

  • 没有找到相关文章

最新更新