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

时间:2018-08-02 10:48:10

标签: regex shell unix sed capture

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

  

xxx_xxx_ab_abcyyy_xxx_xxx:

     

xxx_xxx_jkl_mnoyyy_xxx_xxx:

     

xxx_xxx_abcyyy_xxx_xxx:

我正在尝试使用sed捕获第二个'_'之后的部分,直到该部分的结尾以yyy结尾,是否还有其他部分(例如 ab jkl )。

我正在使用以下命令:

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

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

  

ab_abcyyy

     

jkl_mnoyyy

     

abcyyy

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

label3.layer.borderWidth = 2.0;
label3.layer.cornerRadius = 8;

答案 1 :(得分:0)

尝试以下模式:([a-zA-Z0-9]+_){2}([a-zA-Z0-9_]*yyy)[a-zA-Z0-9_]*:。您需要第二个捕获组(\2)。

([a-zA-Z0-9]+_){2}将确保您首先捕获两个部分,然后立即开始捕获组,直到您放弃yyy

尝试Demo