regex - Linux shell在匹配模式之间提取子字符串
问题描述
假设我有一个字符串poskek|gfgfd|XLSE|a1768|d234|uijjk
,我只想提取LSE
部分。
我只知道|X
直接在LSE之前,|
直接在我感兴趣的部分之后LSE
。
解决方案
使用的另一个答案sed
应该有效,但我总是觉得sed
正则表达式选择有点尴尬,因为它真的是为了替换(因此为什么模式的任何一侧都需要侧翼,.*
而你真正想要的部分需要放在括号中)。这是使用的解决方案grep
:
grep -Po '\|X\K[^|]+'
-P
grep
使用 Perl 更高级的正则表达式引擎的信号
-o
只打印该行的匹配部分
\|X
匹配文字竖线和大写 X
\K
忘记当前匹配的内容(不要将其包含在最终输出中)
[^|]+
除竖线外的一个或多个字符
推荐阅读
- html - 如何使用 css 创建深色叠加层?
- azure-ad-b2c - 密码重置链接 Azure B2C 自定义策略
- angular - 如何将 ng-select 与不同的项目绑定取决于过滤器
- python - 如何有效地将具有多个依赖项的 Kivy Windows 包压缩到单个 .EXE 中?
- python-3.x - 为什么 result() 不带参数?
- php - array_merge 不适用于 2 个特殊的 json 数组
- javascript - CSS:为什么 :hover 应用于整个网站而不仅仅是它应用于的元素?
- python - 将 Python 脚本的结果写入文本文件
- node.js - 来自来源的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- gatsby - Netlify CMS + Gatsby:如何在管理门户上的 Markdown 编辑器中从 html 代码中引用图像