使用sed提取字符第n次和第n+1次出现之间的文本



我想知道如何获取以下字符串

/text1/text2/text3/wanted_text/text5/text6

并仅根据其在第4个和第5个/之间的位置获得所需文本?

一个替换命令就足够了(正如您所说,我显然假设感兴趣的部分在第4个和第5个/之间(:

echo your_text | sed -E 's!(/[^/]+){3}/([^/]+).*!2!'

其中,我使用!作为s替换命令各部分的分隔符,以避免必须转义每个/

更多详细信息:

  • s!…!…!是seach and substitute命令,其中将搜索模式放在第一个中,将替换放在第二个
  • seach模式是(/[^/]+){3}/([^/]+).*并且匹配3次出现的/后接1个或多个非/、后接/再接1个以上非/(…)用于对正则表达式的一部分进行分组,以便您可以将quatifier(如{3}(应用于整个组(就像在(/[^/]+){3}中一样(,并用于捕获匹配的文本以允许您在替换中引用它;在这种情况下,通过1引用与(/[^/]+){3}匹配的3个文本中的第三个,而通过2引用由([^/]+)匹配的文本
  • 则替换仅仅是CCD_ 21(参见前一点(

有关搜索模式如何工作以及了解其所有部分的更多详细信息,您可以参考regex 101上的此演示。

(-E是一个不符合POSIX的选项,它使脚本更具可读性。如果没有它,您必须在(){}+中的每一个前面加上。(

最新更新