bash - 如何通过 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
谢谢!
解决方案
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将一个列表连接成一个字符串。
推荐阅读
- php - 从多个文件夹输出文件
- button - Puppeteer - 无法键入输入字段或单击按钮
- salesforce - 触发器发送的电子邮件模板中的 Marketing Cloud Email Studio AmpScript
- ruby-on-rails - 使用或不使用双引号分割逗号分隔的字符串
- swift - 访问非原始类型枚举案例值?
- swift - Value of type 'AppDelegate' has no member 'Window' swift
- python - 在图像 Python 中裁剪自定义区域
- arrays - TypeError:this.state.PostsAtt.map 不是函数 - ReactJS
- angular - 角度材料:如何测试是否调用了 dialog.open()
- python-3.x - 如何在 Google Colab 中使用 GUI?