【问题标题】:How to cut after a position to a specific character in unix如何在unix中将位置剪切到特定字符
【发布时间】:2014-08-11 03:24:01
【问题描述】:

我的文件名为 dat_cpoybook_tab1_tab2_tabnm.txt。我想从 tab1 中删除。即我的输出将是:

tab1_tab2_tabnm

请注意,每次我需要在两个'_'之后剪切到'.txt'之前

【问题讨论】:

    标签: shell unix aix


    【解决方案1】:
    grep -Po '([^_]+_){2}[^_]+(?=\.txt)'
    
    kent$  echo "a_bx_c_d_e_f_g.txt"|grep -Po '([^_]+_){2}[^_]+(?=\.txt)' 
    e_f_g
    
    kent$  echo "dat_cpoybook_tab1_tab2_tabnm.txt"|grep -Po '([^_]+_){2}[^_]+(?=\.txt)'
    tab1_tab2_tabnm
    

    awk:

    awk -F'_|[.]txt' -v OFS="_" '$0=$(NF-3) OFS $(NF-2) OFS $(NF-1)'
    
    kent$   echo "a_bx_c_d_e_f_g.txt"|awk -F'_|[.]txt' -v OFS="_" '$0=$(NF-3) OFS $(NF-2) OFS $(NF-1)'                                                                          
    e_f_g
    

    【讨论】:

    • grep:不能识别的标志:P grep:不能识别的标志:o
    • @user3726320 以另一种方式回答
    【解决方案2】:
    echo "dat_cpoybook_tab1_tab2_tabnm.txt"|awk -F'.' '{print $1}'|awk -F'_' '{ARR[1]=$0;} 
    END {
    v1=match(ARR[1],"_");
    s1=substr(ARR[1],v1+1);
    v2=match(s1,"_"); 
    print substr(s1,v2+1);       
    }' 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2015-08-04
      • 2020-08-08
      相关资源
      最近更新 更多