首页 > 解决方案 > grep 正则表达式用于返回字符串之间的数值

问题描述

所以我正在运行 linux 命令

ls /etc/systemd/system | grep -o -E "[0-9]+"

它应该只返回数值,唯一的问题是它从我不想要的部分结果中返回一些不需要的数值,我只想要它们之间的数值-.service所以就像test-blah4-1321.service我只想让它返回一样1321。我在这里想念什么?

例子

$ ls /etc/systemd/system
test.service                                test-blah4-1321.service  test-blah2.service                          test-blah5-1387.service  test-blah3-1521.service

标签: regexgrep

解决方案


GNU grep 具有用于 perl 样式正则表达式的 -P 选项,以及用于仅打印与模式匹配的 -o 选项。这些可以使用环视断言(在perlre 手册中的扩展模式下描述)组合,以从 -o 确定匹配的内容中删除部分 grep 模式。

资源

应用于您的示例,这将是:

echo test-blah4-1321.service | grep -oP '(?<=-)\d+(?=\.service)'

推荐阅读