我想知道如何获取以下字符串
/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的选项,它使脚本更具可读性。如果没有它,您必须在(
、)
、{
、}
和+
中的每一个前面加上。(