sed - 发现很难使用 sed 从字符串中提取数字
问题描述
我正在尝试使用 sed 将版本信息提取为字符串,如下所示
echo "A10.1.1-Vers8" | sed -n "s/^A\([0-9]+\)\.\([0-9]\)\.[0-9]+-.*/\1/p"
我想在“A”之后提取“10”。但是上面的表达式没有给出预期的信息。有人可以解释一下为什么这个声明不起作用吗?
我尝试了上述命令并更改了选项 os sed 但没有任何效果。我认为这是一些语法错误
echo "A10.1.1-Vers10" | sed -n "s/^X\([0-9]+\)\.\([0-9]\)\.[0-9]+-.*/\1/p"
预期结果是 '10' 实际上结果是无
解决方案
$ echo "A10.1.1-Vers8" | sed -r 's/^A([[:digit:]]+)\.(.*)$/\1/g'
10
搜索以 A ( ^A
) 开头的字符串,后跟多个数字(我使用的是POSIX 字符类 [[:digit:]]+
),这些数字被捕获在一个组()
中,然后是文字点\.
,然后是其他所有内容(.*)$
。
最后,用 Captured Group content 替换整个内容\1
。
在 GNU sed 中,-r
添加了一些语法糖,在手册页中,它被称为--regexp-extended
推荐阅读
- r - 如何将数据框几何保存到 R 中的 shapefile
- python - 如何存储每个类别对象的总提款金额?
- tensorflow - 使用 .tfrecord 文件进行预测的最佳实践
- android - 从 json 中提取数据到 kotlin 数据类
- vba - 选择性粘贴 msoClipboardFormatPlainText 在 Mac 上创建不需要的换行符
- c++ - 在类构造函数 C++ 中捕获异常
- python - 如何从列表中的键获取字典值?
- javascript - 尝试限制猜测后,javascript(html)while循环不起作用
- c# - 尝试使用 AutoMapper 将 JObject 映射到 c# 类,我得到子元素的 NULL
- jquery - Image-Resize-Crop-imageResizer 在顶级 jquery 插件中不起作用