使用sed捕获两个下划线之间的字符串部分

Capture section of string between two underscores using sed

我有以下格式的字符串列表(xxx 可以是任何字母数字字符):

xxx_xxx_ab_abcyyy_xxx_xxx:

xxx_xxx_jkl_mnoyyy_xxx_xxx:

xxx_xxx_abcyyy_xxx_xxx:

我正在尝试使用 sed 来捕获第二个“_”之后的部分,直到以 yyy 结尾的部分结束,是否有额外的部分(如 abjkl) 或不。

我正在使用以下命令:

sed -r 's/.*_(.+yyy)_.*:/ /':

但我一直在获取整个字符串。 理想的输出是(对于示例的这三个字符串):

ab_abcyyy

jkl_mnoyyy

abcyyy

如有任何帮助,我们将不胜感激。

能否请您尝试以下。考虑到您的 Input_file 与所示样本的模式相同。

sed 's/\([^_]*\)_\([^_]*\)_\(.*yyy\).*//'  Input_file

试试这个模式:([a-zA-Z0-9]+_){2}([a-zA-Z0-9_]*yyy)[a-zA-Z0-9_]*:。第二个捕获组 (</code>) 是您所需要的。 </p> <p><code>([a-zA-Z0-9]+_){2} 将确保您首先捕获两个部分,然后立即开始捕获组,直到您满足 yyy.

尝试Demo