使用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 结尾的部分结束,是否有额外的部分(如 ab和 jkl) 或不。
我正在使用以下命令:
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。
我有以下格式的字符串列表(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)_.*:/ /':
但我一直在获取整个字符串。 理想的输出是(对于示例的这三个字符串):
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。