如何在unix中将位置切换为特定字符

时间:2014-06-20 11:18:35

标签: shell unix aix

我的文件名为dat_cpoybook_tab1_tab2_tabnm.txt。我想从tab1切割。即我的输出将是:

tab1_tab2_tabnm

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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);       
}'