awk/sed 命令剪切多个分隔符

Nir*_*raj 2 sed awk

我有输入文件名:

Sample_0000860156-001-out_20150224150524.xml.gz
Run Code Online (Sandbox Code Playgroud)

我只想0000860156-001从 file_name 附加到我的目标文件名。

ter*_*don 21

这里有一些方法。您还没有解释要对要提取的字符串做什么,所以我将打印它。

  1. awk 带有多个分隔符

    echo Sample_0000860156-001-out_20150224150524.xml.gz | 
     awk -F '[_-]' '{print $2"-"$3}'
    
    Run Code Online (Sandbox Code Playgroud)
  2. GNU grep

    echo Sample_0000860156-001-out_20150224150524.xml.gz | grep -oP '_\K.*(?=-)'
    
    Run Code Online (Sandbox Code Playgroud)
  3. sed

    echo Sample_0000860156-001-out_20150224150524.xml.gz | 
      sed 's/.*_\([0-9]*-[0-9]*\)-.*/\1/'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 珀尔

    echo Sample_0000860156-001-out_20150224150524.xml.gz | 
     perl -pe 's/.*_(.+?-.+?)-.*/\1/'
    
    Run Code Online (Sandbox Code Playgroud)

    或者,使用最新的 perl 版本(感谢@ksenoy):

    echo Sample_0000860156-001-out_20150224150524.xml.gz | 
     perl -aF/[_-]/ -lne 'print $F[1]-$F[2]'
    
    Run Code Online (Sandbox Code Playgroud)
  5. cut

    echo Sample_0000860156-001-out_20150224150524.xml.gz | 
      cut -d_ -f2 | cut -d- -f1,2
    
    Run Code Online (Sandbox Code Playgroud)