首页 > 解决方案 > 如何通过 bash shell 将数字字符串扩展为全范围数字?

问题描述

我有一个数字字符串输入,例如

1-5 11 39-45

并希望通过 Bash(或 sed、awk、grep)作为输出进行扩展,

1 2 3 4 5 11 39 40 41 42 43 44 45

PS最好保持输入原样,所以我不能简单地控制输入作为用 {1..5} 替换 1-5

谢谢!

标签: bashawksedgrep

解决方案


Perl 的救援:

$ echo 1-5 11 39-45 | perl -pe 's/([0-9]+)-([0-9]+)/join " ", $1 .. $2/ge'
1 2 3 4 5 11 39 40 41 42 43 44 45
  • -p逐行读取输入,并在运行代码后打印每一行
  • s///是替换运算符。在这里,它匹配用破折号分隔的两个数字,并用扩展列表替换它们。
  • /g意味着所有事件都将被替换,而不仅仅是第一个。
  • /e告诉将s///替换部分解释为代码。
  • $1$2包含第一对和第二对括号匹配的内容,即数字。
  • ..是范围运算符。
  • join将一个列表连接成一个字符串。

推荐阅读