首页 > 解决方案 > Linux shell在匹配模式之间提取子字符串

问题描述

假设我有一个字符串poskek|gfgfd|XLSE|a1768|d234|uijjk,我只想提取LSE部分。

我只知道|X直接在LSE之前,|直接在我感兴趣的部分之后LSE

标签: regexlinuxbash

解决方案


使用的另一个答案sed应该有效,但我总是觉得sed正则表达式选择有点尴尬,因为它真的是为了替换(因此为什么模式的任何一侧都需要侧翼,.*而你真正想要的部分需要放在括号中)。这是使用的解决方案grep

grep -Po '\|X\K[^|]+'

-Pgrep使用 Perl 更高级的正则表达式引擎的信号

-o只打印该行的匹配部分

\|X匹配文字竖线和大写 X

\K忘记当前匹配的内容(不要将其包含在最终输出中)

[^|]+除竖线外的一个或多个字符


推荐阅读